我试过下面的代码 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
这段代码的输出很奇怪,谁能解释一下它是怎么来的?
最佳答案
在 foo1.c 中,你有两个变量 x 和 y,每个变量有 4 个字节,总共 8 个字节。在 foo2.c 中,您将 x 变量设置为 double。
虽然 foo1(4 字节)中的执行 x 被 foo2(8 字节)中的 x 替换。最终,foo1 中 x & y(共 8 个字节)的内存被 foo2 中的 x(8 个字节)覆盖。
1078263808 value 是 42 的 double float 表示。
注意:foo1 中的 x & y 内存是连续的。
关于c - 如果我们将两个具有不同数据类型的同名变量链接起来怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43360529/