c语言关于变量储存和释放的问题?

有两个程序,两个程序运行的结果都是相同的:都是输出3#include<stdio.h>voidshuchu(int*p){printf("%d\n",*p);}intma... 有两个程序,两个程序运行的结果都是相同的:都是输出3

#include<stdio.h>

void shuchu(int*p)
{
printf("%d\n",*p);
}

int main()
{
int a=3;
shuchu(&a);
}
这第一个程序,我听说,主函数定义的变量要等到主函数执行完才释放,既执行到shuru函数时候,a的依旧没有释放,所以,在shuru函数里面可以输出a的值?这样想对吗?
—————————————————————————————————————————————
#include<stdio.h>

int* shuchu()
{
int a=3;
return &a;
}

int main()
{ int *b;
b=shuchu();
printf("%d\n",*b);
}
但第二个函数,我从shuru函数定义的变量a,到主函数时候,a不会释放吗?为什么还能通过指针输出a的值??
展开
 我来答
nlk520zh
2013-12-12 · TA获得超过729个赞
知道小有建树答主
回答量:414
采纳率:100%
帮助的人:442万
展开全部
第一个理解没问题,第二个你把a的地址赋给了b,也就是有两个指针都指向这个地址,释放是地址,这个地址能被其他变量使用,下面的程序没有变量使用这个地址,所以里面的内容没有消失,所以通过b还是能取出b所指向地址里的内容
一生吥胜
2013-12-12 · TA获得超过208个赞
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:133万
展开全部
第二个函数,变量a离开shuchu()函数的时候,确实已经被释放了内存了,虽然把它的地址返回出来了,但是其实这个值是不可靠的,我觉得能正确输出估计是刚好那个地址保留了上一次的局部变量的值吧...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
网友莫盈
2013-12-12 · 超过19用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:46.9万
展开全部

如果你程序再次用到栈的话,将会覆盖该数据,请自行做以下实验

#include<stdio.h>

int* shuchu()
{
int a=3;
return &a;
}

void dosth(const char * str)
{
    printf("%s\n",str);
}

int main()
{ int *b;
b=shuchu();
dosth("hello");
printf("%d\n",*b);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式