gpt4 book ai didi

c - 链接 c 文件时覆盖变量

转载 作者:太空狗 更新时间:2023-10-29 15:38:35 28 4
gpt4 key购买 nike

我有两个文件:

冷杉.c

int x = 7;
int y = 5;
int main()
{
p2();
printf("%d\n", x);
return 0;
}

还有:

sec.c

double x;
void p2()
{
x = 6;
}

链接并编译这两个文件后,我正在打印 x 并得到 0 作为输出。此外,打印 y 后,我得到 4018000 作为输出。我知道 x 会覆盖 y,但为什么我会得到这些值 ?这到底是什么意思?

最佳答案

首先,我非常确定您在 printf 中使用的是“%x”而不是“%d”。其次,我非常确定它是 40180000 而不是 4018000(一个额外的零)。

假设这是真的,这里是你得到这个值的地方:

在第一个程序中,x 和 y 作为整数(4 个字节)在内存中相邻存储。第二个程序链接到第一个程序的“x”并将其视为 double (8 字节),不为第二个程序分配新内存。

现在是 IEEE double (link here) 中“6”的二进制表示

0x01000000 00011000 00000000 00000000 00000000 00000000 00000000 00000000 存储在“x”

十六进制=0x4018000000000000

因为第一个程序只看到 int 部分

0x01000000 00011000 00000000 00000000

=0x40180000

因为“%x”向您显示了十六进制“40180000”。

顺便说一句:重现你的结果只是为了确保。

关于c - 链接 c 文件时覆盖变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22589366/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com