函数传递指针参数时注意的问题

函数传参,在不使用'&'符号的时候,永远传递的是副本!

所以指针也不例外。

所以,我们传递指针的时候,可以在函数里进行“->”运算符的一些操作,但是,

对于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。

}

嗯,就是这个原因吧

//个人观点~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值