传递给函数的 C++ 空指针

c++ empty pointer passed to function

本文关键字:C++ 空指针 函数      更新时间:2023-10-16
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=%dn", *b);
}

我希望看到 b=3 被打印出来,但是,它是一个 SIGSEGV。我想知道为什么 b 即使我指向 in side foo() 也没有指向任何东西?

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

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

但是,建议您不要这样做。如果您打算在函数意义上将函数定义为过程子例程,那么让函数修改状态可以被认为是不好的风格。原因是,对于哪些函数更改其输入或不更改,而不必努力操作现有类型系统,并没有真正明确的区别。