关于函数返回值的存储问题?

如题:voidmain(){intfun();printf("%d\n",fun());}intfun(){inta=15;returna;}请问:fun()函数内定义的... 如题:void main(){ int fun(); printf("%d\n",fun()); } int fun(){ int a=15; return a;} 请问:fun()函数内定义的a,是不是在调用完就收回分配给a的存储空间呀!如果是那么这里返回给主函数的15又是储存在那里呢? 展开
 我来答
匿名用户
2014-01-16
展开全部
fun里的a存储在调用fun函数时开辟的栈空间里,这块栈只在调用fun时对fun可用,调用结束后返回的a,其实是暂存在寄存器里的(一般情况下是eax),而返回到main里时,main又会把返回的值拷贝到自己所有的栈空间里(在这里是以临时变量的形式)。所以不管是fun还是main,任何非static、register变量和常量的存储都是在函数的局部存储区里(也就是对当前调用函数可见的栈空间)。main也是一个函数。

1、调用完就收回;
2、不是,栈是一段公共内存,函数的代码也不是存在栈里的,只是从栈上给新调用的函数分配一段栈空间,用来保存这个函数执行期间用到的局部变量;
3、函数的返回是被保存在寄存器里的(这个返回指的是return,不包括通过参数返回或者全局变量),栈空间由程序自动维护,函数退出以后栈的内容其实不会更改,只是栈指针复位,所以函数内部的局部变量声明了如果不赋值,它的值就是随机的也就是这个道理。
匿名用户
2014-01-16
展开全部
确实收回了,出现这种情况是因为,内存虽然释放了,但是数据还是在内存的那块地址空间中没变的,所以这时你可以直接从这个地址中读出数据来,因为数据暂时没被破坏。如果这时你调用了一个别的函数再去读这块地址,你就会发现数据已经变了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式