C++ c++;传递给函数的空指针
我希望看到b=3被打印出来,但是,它是一个SIGSEGV。我想知道为什么即使我在side foo()中将b指向a,b也不指向任何东西?C++按值复制。这意味着,在变量通过参数传递后,实际上只复制变量的值。函数内部的C++ c++;传递给函数的空指针,c++,pointers,C++,Pointers,我希望看到b=3被打印出来,但是,它是一个SIGSEGV。我想知道为什么即使我在side foo()中将b指向a,b也不指向任何东西?C++按值复制。这意味着,在变量通过参数传递后,实际上只复制变量的值。函数内部的b只是主函数中b的一个副本,一旦函数结束就会消失 如果要对实际值进行操作,必须使用引用。使用int*&作为类型以获取“指向int类型指针的引用”。引用保留在函数内部发生的状态更改,并将更改main()中b的值 但是,建议您不要这样做。如果您打算将函数定义为函数意义上的函数,而不是过程子
b
只是主函数中b
的一个副本,一旦函数结束就会消失
如果要对实际值进行操作,必须使用引用。使用int*&
作为类型以获取“指向int类型指针的引用”。引用保留在函数内部发生的状态更改,并将更改main()
中b
的值
但是,建议您不要这样做。如果您打算将函数定义为函数意义上的函数,而不是过程子例程,那么让函数修改状态可能被认为是一种糟糕的风格。原因是,如果不鼓励操作现有的类型系统,就无法真正明确区分哪些函数更改其输入。
foo
不会更改指针。首先,因为它获取指针的副本。要更改指针,您需要指定指针或引用。像这样:voidfoo(int*a,int*&b)
。第二,它根本不需要为b
分配任何内容。此外,您也无法获取SIGSEGV,因为代码甚至不会编译为such@SamiKuhmonen@VermillionAzure代码被修改了。现在当然可以了。
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);
}