函数可以返回局部变量?

Primer__ 2014-09-23 11:55:44

//a.cc
int T()
{
int x=2;
return x;
}
int main()
{
T();
}



//b.cc
int T(int x)
{

return x;
}
int main()
{
int x=2;
T(x);
}



//c.cc
int T(int &x)
{

return x;
}
int main()
{
int x=2;
T(x);
}



//d.cc
int &T(int &x)
{

return x;
}
int main()
{
int x=2;
T(x);
}


--------
问题:
1.函数形参,是局部变量么?
2.函数定义,可以返回return局部变量么?
...全文
204 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Primer__ 2014-09-23
  • 打赏
  • 举报
回复
楼上: 上面这些程序,对么?
  • 打赏
  • 举报
回复
1 是的 2 这个取决于你返回的类型。函数返回会把相应的变量复制一份。但你得注意,局部内存指针
Primer__ 2014-09-23
  • 打赏
  • 举报
回复
3.上面程序,都对么? 说说原因。
勤奋的小游侠 2014-09-23
  • 打赏
  • 举报
回复
引用 6 楼 Primer__ 的回复:

int &T()
  {
    int x=2;
    return x;
  }

int &T(int &x)
  {
    return x;
  }
上面两个函数,它们的返回类型,都是引用。 它们有什么区别?都对么? 为什么?
第一个会出问题,引用的是一个临时变量,这个内存可能被其它人用了,会引起想不到的错误。
lsjfdjoijvtghu 2014-09-23
  • 打赏
  • 举报
回复
最后一个是返回函数指针吗? 大概是都可以编译过的。
Primer__ 2014-09-23
  • 打赏
  • 举报
回复

int &T()
  {
    int x=2;
    return x;
  }

int &T(int &x)
  {
    return x;
  }
上面两个函数,它们的返回类型,都是引用。 它们有什么区别?都对么? 为什么?
就想叫yoko 2014-09-23
  • 打赏
  • 举报
回复
你要写这种测试也写个变量接收一下T的返回值嘛~ 多打印打印地址就清楚点了 另外提醒一下, int var = T(); int &var = T(); 是不一样的
starytx 2014-09-23
  • 打赏
  • 举报
回复
1.函数形参属于局部变量,生命周期在函数运行期内 2.可以返回局部变量,需要注意的是不能返回局部变量的地址(因为局部变量所占空间在函数结束后会失效,其中的内容不确定,有可能已被擦写,返回地址后被误用后,后果无法预测) 3.程序基本没啥问题,有的是返回对象,有的是引用而已

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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