如果我们 link 都是具有不同数据类型的同名变量怎么办?
what if we link both same name variable with different data type?
我试过下面的代码 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 值是 42 的双精度浮点表示。
注意:foo1 中的 x & y 内存是连续的。
我试过下面的代码 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 值是 42 的双精度浮点表示。
注意:foo1 中的 x & y 内存是连续的。