函数传参,在不使用'&'符号的时候,永远传递的是副本!
所以指针也不例外。
所以,我们传递指针的时候,可以在函数里进行“->”运算符的一些操作,但是,
对于new操作是无效的!因为函数传递的是指针副本,那么使用new的时候,是给这个副本进行的new操作,原来的指针还是未能分配空间。
比如OringinalPointer = 0x123456 ;
现在给一个函数f()传该指针,
那么copyPointer = Oringinal = 0x123456 ;
进行new操作时,copyPointer = new Type ;
copyPointer = 0x654321 ;
可是Oringinal的值仍未改变。
但是使用->运算符时,操作的则是他们存储的内容,既是0x123456指向的数据,因此可以成功更改。
传参时的‘&’符则表示传递的是引用,既是所谓的别名,即不存在拷贝的问题,就是OringinalPointer这个指针,可以进行new操作。
进一步,函数返回一个指针时,同样传递的是副本(结合汇编的知识)
所以不能讲函数返回的指针作用于‘&’符。
如:
int* getNode()
{
return Xpointer ;
}
void Process(int* & x)
{
x = new int ;
}
现在想要尝试这样,
process(getNode()) ;
这样编译不通过。
{
可以这样做,
int** getNodeAdress()
{
return & Xpointer ;
}
然后这样调用Process(*getNodeAdress()) ;
这样ok。
}
嗯,就是这个原因吧
//个人观点~