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的值?? 展开
#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的值?? 展开
3个回答
展开全部
第二个函数,变量a离开shuchu()函数的时候,确实已经被释放了内存了,虽然把它的地址返回出来了,但是其实这个值是不可靠的,我觉得能正确输出估计是刚好那个地址保留了上一次的局部变量的值吧...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你程序再次用到栈的话,将会覆盖该数据,请自行做以下实验
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询