gpt4 book ai didi

c++ - 了解 union 的内存内容

转载 作者:IT王子 更新时间:2023-10-28 23:35:06 26 4
gpt4 key购买 nike

假设我这样定义一个 union :

#include <stdio.h>

int main() {
union u {
int i;
float f;
};
union u tst;
tst.f = 23.45;

printf("%d\n", tst.i);

return 0;
}

谁能告诉我存储 tst 的内存是什么样子的?

我试图理解这个程序产生的输出 1102813594

最佳答案

这取决于实现(编译器、操作系统等),但如果需要,您可以使用调试器实际查看内存内容。

例如,在我的 MSVC 2008 中:

0x00415748  9a 99 bb 41

是内存内容。从左侧的 LSB(Intel,little-endian 机器)读取,这是 0x41bb999a 或实际上是 1102813594。

然而,通常整数和 float 存储在相同的字节中。根据您访问 union 的方式,您将获得这些字节的整数或浮点解释。同样,内存空间的大小取决于实现,尽管它通常是与某个固定边界对齐的最大组成部分。

为什么在您(或我的)案例中具有这样的值(value)?您应该阅读有关 float 表示的信息(查找 ieee 754)

关于c++ - 了解 union 的内存内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2376899/

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