c ++空指针传递给函数

时间:2016-01-30 06:05:53

标签: c++ pointers

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()?

1 个答案:

答案 0 :(得分:0)

C ++按值复制。这意味着一旦传递参数,您实际上只复制变量的值。函数内部的b只是main中b的副本,一旦函数结束就会消失。

如果要对实际值进行操作,则必须使用参考。使用int* &作为类型来获取指向类型int"的指针的引用。引用会保留函数内部发生的状态更改,并会更改bmain()的值。

但是,建议您不要这样做。如果您打算在 functional 意义上定义函数而不是作为过程子例程,那么将函数修改为状态可能被认为是错误的样式。原因在于,在不必劝勉操纵现有类型系统的情况下,对哪些功能改变其输入没有真正明确的区别。