为了账号安全,请及时绑定邮箱和手机立即绑定

C+返回局部变量的引用

C+返回局部变量的引用

C++ C
弑天下 2019-06-09 16:50:44
C+返回局部变量的引用如果必须返回i,下面的代码(function 1()正确吗?我记得在某个地方读到当返回对局部变量的引用时会出现问题。它与函数2()有什么不同?int& func1(){     int i;     i = 1;     return i;}int* func2(){     int* p;     p = new int;     *p = 1;     return p;}
查看完整描述

3 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

局部变量是堆栈上的内存,当超出作用域时,内存不会自动失效。从更深层次的嵌套函数(内存中堆栈的更高部分)来看,访问这个内存是完全安全的。

但是,一旦函数返回并结束,事情就变得危险了。通常,当您返回时,内存不会被删除或覆盖,这意味着内存仍然包含您的数据-指针看起来是有效的。

直到另一个函数构建堆栈并覆盖它。这就是为什么这可以工作一段时间-然后突然停止功能后,一个特别深嵌套的函数集,或一个非常大的或许多本地对象的函数,再次到达堆栈内存。

甚至可能发生的情况是,您再次到达同一个程序部件,并用新函数变量覆盖旧的局部函数变量。所有这一切都是非常危险的,应该非常气馁。不要使用指向本地对象的指针!


查看完整回答
反对 回复 2019-06-09
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

值得记住的是这些简单的规则,它们同时适用于参数和返回类型.。

  • Value-复制所涉项目。
  • 指针-指有关项目的地址。
  • 引用-字面上是所讨论的项目。

每个人都有时间和地点,所以一定要了解他们。正如您在这里所展示的,局部变量仅限于它们在函数作用域中在本地存在的时间。在您的示例中,返回类型为int*回归&i同样也是不正确的。如果那样的话你做这个会更好.。

void func1(int& oValue){
    oValue = 1;}

这样做将直接更改传入的参数的值。而这个密码.。

void func1(int oValue){
    oValue = 1;}

不会的。它只会改变oValue函数调用的本地。之所以这样做,是因为您实际上只需要更改一个“本地”副本。oValue,而不是oValue本身。


查看完整回答
反对 回复 2019-06-09
  • 3 回答
  • 0 关注
  • 682 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信