首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

函数的形参为什么可以作为函数的返回值解决方法

2012-04-16 
函数的形参为什么可以作为函数的返回值函数的形参不是分配在内存的栈区么?应该在函数运行结束的时候销毁这

函数的形参为什么可以作为函数的返回值
函数的形参不是分配在内存的栈区么?应该在函数运行结束的时候销毁这些位于栈区的临时变量,为什么还能作为函数的返回值呢?
eg:
int foo(int i,const int *p_src)
{
  ...
  return i; //不是在函数结束的时候被销毁了吗?
}

[解决办法]
在销毁前保存在eax里传递给调用环境的变量了
[解决办法]
产生临时变量
[解决办法]
int main()
{
...
int i_test = foo(a,b); //实际上已经传递给a了?是这个意思吗?
}
实质上是赋值给了i_test, 

eax实质上就是个临时变量
[解决办法]
return i;
这个返回并不是返回i本身,而只是返回i的值,比如说:

int foo(int i,const int *p_src)
{
...
return i; //不是在函数结束的时候被销毁了吗?
}

int n;n = foo(3,0);当进行调用时,i的值为3,也即是i = 3;当调用结束,函数返回i时,会将i的值3返回给一个不属于这个foo函数中的临时变量temp,也就是临时变量temp = 3,这个临时变量不在函数foo中,因此函数foo调用结束后,这个临时变量temp不会被销毁,然后将temp的值赋值给n
[解决办法]
return i;此语句结束后才销毁,但是非引用类型的返回值返回的是副本,即此函数返回的是i的副本,副本和i没有任何关系!i销毁与否都不影响。
[解决办法]
http://topic.csdn.net/u/20111209/11/224e9d76-192c-4a2f-814c-b1ac3457f9f4.html?57677


你需要知道什么是左值,什么是右值.如果没有好点的书的话就耐心看上面的链接.
[解决办法]
http://www.cnblogs.com/chenyuming507950417/archive/2011/12/29/2306043.html
别说看了这篇文章你还不懂
[解决办法]

探讨

引用:

return i;此语句结束后才销毁,但是非引用类型的返回值返回的是副本,即此函数返回的是i的副本,副本和i没有任何关系!i销毁与否都不影响。


貌似和7楼的是一个意思,看来是可以这么理解。可惜不知道怎么用汇编看看细节,也看不到哪里有copy_i.
否则也不会这么纠结了。

热点排行