为什么说返回局部变量地址的行为被提示是不可预知的

look_think 2003-09-29 09:45:21
书中提示:返回局部变量地址的行为被提示是不可预知的,为什么。
以下程序为例。
#include <iostream.h>

int f()
{
int a = 3;
return a;
}

int* g()
{
int a = 3;
return &a;
}

int& h()
{
int a = 3;
return a;
}

void main()
{
cout<<g()<<endl;
cout<<*g()<<endl;
cout<<h()<<endl;
}

为什么有如下警告,而结果又是没有问题的?即都返回3
returning address of local variable or temporary
...全文
118 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tolixiaohui 2003-09-29
  • 打赏
  • 举报
回复
可能出错
7thmarine 2003-09-29
  • 打赏
  • 举报
回复
局部变量所占的内存空间在函数作用域结束以后就被释放了,因此,当返回这个地址的时候
,里面存放的未必是你所要的值了,运气好的话正好还是那个值,但是返回局部变量的地址这种行为所带来的后果是不可预料的,所以绝对不能让一个函数返回局部变量的地址
daizh 2003-09-29
  • 打赏
  • 举报
回复
这实质上是变量的作用域(生成期)的问题,楼主提出的问题,都是将局部变量(或变量地址)作为函数的返回值,这就导致一个问题:该局部变量(是存储在stack中)在函数执行完后就自动将该局部变量所占的stack就释放掉了,所以返回的地址就不存在。
windyguy 2003-09-29
  • 打赏
  • 举报
回复
因为局部变量是auto的,不是static
simclock 2003-09-29
  • 打赏
  • 举报
回复
因为返回之后那些空间已经回收了,所以可能就是警告一下告诉你那些东西返回来也没什么用了,用了容易出危险吧。:)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧