函数在用值传递和引用传递返回值时,内存是如何管理的?

palm505 2005-01-27 07:43:03
一般函数在栈中为其所声名的返回值类型开辟新空间,函数返回时,返回值被弹出栈,
并赋值为函数调用本身的值。例如以下三种返回值方式:

int Function(int a)
{
...
return a;
}


int *Function(int *a)
{
...
return a;
}


int &Function(int &a)
{
...
return a;
}

根据以上所述,请问:函数名Function在值传递时似乎还有赋值的用处;而在引用传递时,
返回值似乎没有必要,也不太理解返回值a与函数名Function的关系?
Function本身的生命期或作用域如何?
其实,我还是对函数在用值传递和引用传递返回值时,内存是如何管理的问题不太理解,
敬请指点.

...全文
143 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2005-01-27
  • 打赏
  • 举报
回复
传递值用的是拷贝
传递指针,引用用的是地址,效率高些
CMyMfc 2005-01-27
  • 打赏
  • 举报
回复
int *Function(int *a)
{
...
return a;
}
如果主调函数中,
int *b = Function(&a);

Function(&a);
int *b = &a;有什么区别?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这两个做的事情结果一样, 只不过前者走了点弯路, 效率比后者低几倍

后面一样
palm505 2005-01-27
  • 打赏
  • 举报
回复
int *Function(int *a)
{
...
return a;
}
如果主调函数中,
int *b = Function(&a);

Function(&a);
int *b = &a;有什么区别?

亦或
int &Function(int &a)
{
...
return a;
}
如果主调函数中,
int &b = Function(a);

Function(a);
int &b = a;又有什么区别?
YFY 2005-01-27
  • 打赏
  • 举报
回复
个人认为函数返回以后,函数的生命期就玩完了.

返回值一般与传入的参数没有什么关系~
只要与函数的定义的类型一致就可以了吧~

值传递的时候,在函数调用期间系统复制了一个同样类型的值过去,函数调完,变量的生存期也玩完.
引用传递的时候,函数调用期间压到栈中的是变量的地址而已,函数中对引用变量的更改都会影响到
变量本身的值,调用完成释放也是引用变量的地址,与原变量没有关系.
CMyMfc 2005-01-27
  • 打赏
  • 举报
回复
传值, 把值拷贝一份压入栈中, return时,弹出再拷贝一份
引用实际是传址,把地址拷贝一份压入栈中, 函数内通过地址对数据进行访问, return之后, 将地址拷贝一份
DesertStorm 2005-01-27
  • 打赏
  • 举报
回复
这些函数堆栈的使用应该都是一样的,没有区别。

65,210

社区成员

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

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