void foo(int* a, int* b){
b=a;
}
int main(int argc, char** argv)
{
int* a=new int(3);
int* b=NULL;
foo(a, b);
printf("b=%d\n", *b);
}
我希望看到b = 3,但是,它是一个SIGSEGV。我想知道为什么b指向什么都没有,即使我指向一个侧面foo()?
答案 0 :(得分:0)
C ++按值复制。这意味着一旦传递参数,您实际上只复制变量的值。函数内部的b
只是main中b
的副本,一旦函数结束就会消失。
如果要对实际值进行操作,则必须使用参考。使用int* &
作为类型来获取指向类型int"的指针的引用。引用会保留函数内部发生的状态更改,并会更改b
中main()
的值。
但是,建议您不要这样做。如果您打算在 functional 意义上定义函数而不是作为过程子例程,那么将函数修改为状态可能被认为是错误的样式。原因在于,在不必劝勉操纵现有类型系统的情况下,对哪些功能改变其输入没有真正明确的区别。