如果我们将两个同名变量连接到不同的数据类型,该怎么办?
我曾尝试下面的代码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通过X在foo2的(8个字节)代替。最终,foo1中y(共8个字节)的内存x &被foo2(8字节)中的x覆盖。
1078263808值漂浮在双42点表示。
注:X &在foo1Ÿ回忆是连续的。
我几乎没有得到你,但仍然困惑为什么x = 0和y = 1078263808?可以详细解释一下吗?我没有得到这一行“1078263808值是浮点数42的双倍表示。” ! @Rajeshkumar –
这是一个非常明确的答案。为了执行它,您可以生成一个映射文件来演示x和y的相应位置。更超过你可以让另一个小程序来显示,42.0(双)铸造(的printf( “%LD \ N”(INT)(42.0))在1078263808进行编码。 –
此程序的行为是[未定义](https://en.m.wikipedia.org/wiki/Undefined_behavior)。也请不要发布代码图片。 –
@ n.m。好的,我改变了代码感谢您的建议 –
当你撒谎你的编译器,它会得到自己的回不到你所期望的。 –