求助:关于函数返回值为局部变量
#include <iostream>
int funct(int x);
int main()
{
int temp,result;
cout << "Please enter an int:"<<endl;
cin >> temp;
result = funct(temp);
return 0;
}
int funct(int x)
{
int dou;
dou = 2 * x;
result dou;
}
很简单的程序,我就是想知道函数得返回值dou是局部变量,那么这个函数是怎么把它赋值给result的??
请高手详细解释一下,谢谢!!
问题点数:40、回复次数:12Top
1 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-16 12:39:59 得分 5
dou的值放到某寄存器,比如EAX。
函数返回后。
mov [result], eaxTop
2 楼citywanderer2005(流浪狗)回复于 2006-03-16 12:48:47 得分 0
我觉得跳出函数后,dou所占内存被释放,只是返回一个值的拷贝给result而已。
呵呵,个人意见Top
3 楼1982pc()回复于 2006-03-16 12:50:49 得分 0
其实就是返回的dou值的拷贝~~~~Top
4 楼bm1408(向va_list学习~不用VC好多年~)回复于 2006-03-16 13:13:44 得分 10
int funct(int x)
{
int dou;
dou = 2 * x;
result dou;
}
return dul时,编译会把dou在外部生成一个临时变量,
执行
}
后dou失效,但那个变量还存在,后面就好理解了...Top
5 楼Dugowe(我不是火星人,我家狗狗才是..)回复于 2006-03-16 13:18:22 得分 0
那它生成的那个临时变量怎么处理??Top
6 楼ugg(逸学堂(exuetang.net))回复于 2006-03-16 13:19:18 得分 10
result dou;
系统给你维护dou临时对象的拷贝赋值给result。
如果lz用VS.net2005,在编译选项中有一个设置,可以不用
生成临时对象拷贝的方式来完成赋值,而是临时对象直接到result赋值。Top
7 楼zh2817()回复于 2006-03-16 14:47:27 得分 0
对于result dou;你的目的是
dou临时对象的拷贝赋值给result,但是这样是不对的,因为result不是类或结构类型申明Top
8 楼wshcdr(dd)回复于 2006-03-16 14:53:46 得分 0
其实就是返回的dou值的拷贝~~~~
Top
9 楼greenteanet(扎扎实实打基础,保持一颗平常心。)回复于 2006-03-17 12:58:19 得分 0
利用临时变量进行拷贝Top
10 楼fiftymetre(50米深蓝)回复于 2006-03-17 13:04:16 得分 10
临时对象,在C++表层和内部实施非常至多.
http://dev.csdn.net/article/17/17610.shtmTop
11 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-17 17:15:43 得分 5
返回值dou是局部变量,那么这个函数是怎么把它赋值给result的?
-----------------------------
返回前先将 变量的 值保存到一个临时空间,
释放变量 ,
然后,在主调函数中,
这个临时变量的值被赋值到接收变量中 ..
完成 ..Top
12 楼Dugowe(我不是火星人,我家狗狗才是..)回复于 2006-03-17 18:00:01 得分 0
To: lixingzhong
那个保存变量的临时空间什么时候释放??Top




