我试过下面的代码foo1.c
#include<stdio.h>
void f(void);
int x = 38;
int y = 39;
int main() {
f();
printf("x = %d\n", x);
printf("y = %d\n", y);
return 0;
}
foo2.c
double x;
void f() {
x = 42.0;
}
输出:
$ gcc -o myprog foo1.c foo2.c
$ ./myprog
x = 0
y = 1078263808
我得到了这个代码的奇怪输出,有人可以解释它会如何来?
答案 0 :(得分:2)
在foo1.c中,你有两个变量x和y,每个变量有4个字节,总共8个字节。在foo2.c中,你有x变量为double。
foo1(4字节)中的执行x被foo2中的x替换(8字节)。最终记忆x&amp; foo1中的y(总共8个字节)被foo2中的x覆盖(8个字节)。
1078263808值是浮点表示为42的双倍。
注意:x&amp;你在foo1的记忆是连续的。