求一个奇怪的C语言题目

来源:百度知道 编辑:UC知道 时间:2024/05/26 18:15:39
#include <stdio.h>
int foo(void){
int i;
printf("%d\n",i);
i=777;
}
main(){
foo();
foo();
}
运行结果是
134518128
777

#include <stdio.h>
int foo(void){
int i;
printf("%d\n",i);
i=777;
}
main(){
foo();
puts("abc");
foo();
}
结果却是:
134518244
abc
134513440
为什么第二次调用foo的结果不同?

局部变量生存周期结束后,内存维持原状,直到有新的变量将其覆盖,就是这样

楼上有点道理,
个人认为主要是因为是调用同一函数,而且是同一主程序内,所以函数入口地址相同,并且中间没有进行别的操作,从而分配给同一变量在地址也相同,而得到他的值,你上面的代码就好比每一个函数是给i赋值。但实际上不是。

下面的你中间进行了别的操作,可能覆盖了一些内存内容。因为C 所有可用的才64K.