首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这段代码为什么能执行?该如何处理

2012-03-05 
这段代码为什么能执行?#includestdio.hint *b(){int a3int *p&areturn p}void main(){int *ppb()

这段代码为什么能执行?
#include<stdio.h>
int *b()
{
int a=3;
int *p=&a;
return p;
}
void main()
{
int *p;
p=b();
printf("%d",*p);
}

代码是我乱写的,我用vc6编译结果是3,局部变量不是只在函数体里有效吗?那么函数执行完局部变量应该消失了啊没作用了啊,怎么那个函数返回的地址的指向还是3呢?

[解决办法]
局部自动变量所占内存在作用域外访问的时候,就是读取该处内存数据,如果该处内存没有被重写,还是原来的数据,一旦重写则改变。举个例子:
 
void main() 

int *p; 
p=b(); 

// 在栈上创建一个数组并赋值
int c[1000];
memset(c, 0, sizeof(c)/sizeof(int));

printf("%d",*p); 


上面的输出应该就不是3了

热点排行