Moe*_*oeb 8 c c++ memory memory-management unions
假设我定义了一个这样的联合:
#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该程序产生的输出.
Eli*_*sky 11
这取决于实现(编译器,操作系统等),但如果需要,您可以使用调试器实际查看内存内容.
例如,在我的MSVC 2008中:
0x00415748  9a 99 bb 41
是记忆内容.从左侧的LSB(Intel,little-endian机器)读取,这是0x41bb999a或实际上是1102813594.
但是,通常,整数和浮点数存储在相同的字节中.根据您访问联合的方式,您可以获得这些字节的整数或浮点解释.内存空间的大小同样取决于实现,尽管它通常是与某些固定边界对齐的最大成分.
为什么这样的价值在你的(或我的)情况下呢?你应该阅读有关它的浮点数表示(查找ieee 754)
结果取决于编译器实现,但对于大多数x86编译器,float和int的大小相同.维基百科有一个非常好的32位浮点布局图http://en.wikipedia.org/wiki/Single_precision_floating-point_format,这可以帮助解释1102813594.
如果将int打印为十六进制值,则更容易理解.
printf("%x\n", tst.i);