C++ * a和*&a作为函数的参数时有什么区别

void foo(int * ptr){
*ptr = 9;
}

void foo2(int *& ptr){
*ptr = 10;
}

int main()
{
int *t,a =1;
t = &a;
printf("t:%d\n",*t);
foo(t);
printf("foo:%d\n",*t);
foo2(t);
printf("foo2:%d\n",*t);
return 0;
}
-----
结果:
t:1
foo:9
foo2:10
网上的答案都看过了,不要复制粘贴
好像懂了。
*:
指针的变量,传入的只是地址值,不能改变原指针所指地址。只想改变所指对象值时使用。
*&:
&是C++内容,*&表示指针的引用,操作它即操作原指针。即可改变原指对象的值,又可改变原指针所指对象。

既然你自己都已经知道了,我就不说这个了。
但我想多说一层。既然你学了C++,就应该尽可能使用引用,而不是指针。如果你不准备使用C++, 那么对于你这样的代码,你应该改为void foo2(int ** ptr)去达到你的目的。
因为指针虽然灵活。但是他可以被持有者释放内存。这是个很大的问题。如果两个指针变量分别持有一块内存。那么当其中一个释放了这块内存之后,另一个指针的存在就是个问题。
当然,你若使用引用,便没有这个问题了。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答