高中底手路过都进来一下,讨论点小问题
比如说有这样一个函数
#include <iostream.h>
int fun1(int x,int y)
{
int z;
z=x+y;
return z;
}
void fun2()
{
cout<<"do nothing!"<<endl;
}
int main()
{
int a,b,c;
cout<<"please input two number:"<<endl;
cin>>a>>b;
c=fun1(a,b);
cou<<c<<endl;
fun2();
cout<<c;
return 0;
}
在这个函数里面,函数返回的时候,到底是被调函数的栈还存在,只是他的栈指针指向了别处,还是它将值给了主函数栈中的一个临时变量通过临时变量把值给了c而被调函数的栈已经撤消?
如果是前者,那主函数第二次输出c的时候怎么找到那个栈中的值的呢?
问题点数:30、回复次数:10Top
1 楼goodluckyxl(被人遗忘的狗)回复于 2006-03-10 09:10:46 得分 6
是你说的后者
函数调用完成后call内占用的栈区变量释放了
fun1返回的的int在寄存器中 赋给了c后即便寄存器在fun2的call中被修改也无妨
c属于main函数中的栈变量 保持到return 0;后释放Top
2 楼qybao(阿宝)回复于 2006-03-10 09:15:36 得分 5
后者,函数返回值在被调处压栈(调用者的栈),然后撤销函数栈(被调者的栈)Top
3 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2006-03-10 10:22:10 得分 2
学习
Top
4 楼fulgent_lee(共同学习-->共同进步)回复于 2006-03-10 10:34:03 得分 3
后者Top
5 楼yelling(Ray(←☆→射手))回复于 2006-03-10 10:52:00 得分 3
后面的Top
6 楼aniude(重返荣耀)回复于 2006-03-10 12:59:14 得分 2
MarkTop
7 楼ytfrdfiw()回复于 2006-03-10 16:35:51 得分 2
学习Top
8 楼tor_sun(宋笑痴)回复于 2006-03-10 17:14:42 得分 2
路过学习!!Top
9 楼redf0x_1(雪逸红狐)回复于 2006-03-10 17:23:24 得分 3
后者,这就是为什么函数的返回是值传递,即将值复制给了接收者Top
10 楼weilong122(萧瑟)回复于 2006-03-10 17:51:52 得分 2
受教了
感谢各位Top




