int* b=new int();
*b=1;
replace(b);
showmessage(b);//b==2? 正确结果是这里是1.
replace2(b);
showmessage(b);// 正确结果是这里b==2;
void replace(int *c)
{
int*d=new int();
*d=2;
c=d;
}
void replace2(int* &c)
{
int*d=new int();
*d=2;
c=d;
}
replace:
这是因为b在传递给形参c时,虽然c和b指向的地址是相同的,但是c和b有不同的空间。
即c和d的左值不同,右值相同。在函数内c=d时,只是将c的右值更改,b的右值并没有改变。
所以只能传引用,或者通过返回值。