c语言局部变量会被回收吗?

如main(){asd(1,2);}voidasd(inta,intb){}传递后,局部变量是否能保留?...
main(){asd(1,2);}
void asd(int a,int b){}
传递后,局部变量是否能保留?
展开
 我来答
linnjing
2014-04-17 · TA获得超过2632个赞
知道大有可为答主
回答量:1230
采纳率:91%
帮助的人:515万
展开全部
局部变量 肯定会被回收的,当然也不会保留。要保留传递的局部变量,需要在函数内部手动转存到全局变量 或者 静态变量,换句话说,全局变量 和 静态变量 是可以保留的。
追问
那为什么第二次无参数调用的时候变量值仍然存在?这是变量指向的地址没有改变吗?怎样查看变量名所在的地址?...怎么看查看是否被回收?请闻回收是在该程序结束时回收还是函数调用结束时?程序未结束,局部变量会一直存在吗?请问在子函数函数内声明的变量与在子函数参数内声明的变量一样吗?
追答
回收并不意味着重新初始化。回收是把之前用过,现在不用的,拿来重新分配。重新分配的变量,值是随机的,重新分配也不意味着初始化。事实上,C语言写的程序漏洞经常由变量没有正确的初始化而导致。
C语言调用,局部变量的分配有一定的规则,假设你在一个函数中用过一个变量,在局部变量中分配,你给它一个值,然后你不用了。紧接着,到另一个函数中重新定义一个变量,因为没有初始化,这个变量有一个随机的值,这个随机的值,极有可能是之前的值。
以上是理论上的讨论,实际运行时,局部变量一般是在“栈”上分配的,少量的局部变量可能直接使用寄存器。子函数声明的参数变量,经常就是放在寄存器中,除了有调用程序传过来的初值,与普通的局部变量没有区别。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式