我知道C中union的基本性质,但仍然不能理解输出,有人能解释一下吗?

#include <stdio.h>

int main()
{
        union uni_t{
                int i;
                char ch[2];
        };
        union uni_t z ={512};
        printf("%d%d",z.ch[0],z.ch[1]);
        return 0;
}

运行此程序时的输出是
02

最佳答案

union a
{
    int i;
    char ch[2];
}

这声明了一个类型union a,其内容(即该类型变量的内存区域)可以作为整数(a.i)或2元素字符数组(a.ch)访问。
union a z ={512};

这将定义一个z类型的变量union a,并将其第一个成员(碰巧是a.i类型的int)初始化为512的值。(Cantfindname有它的二进制表示。)
printf( "%d%d", z.ch[0], z.ch[1] );

这将从a.ch中获取第一个字符,然后是第二个字符,并打印它们的数值。坎特芬德纳姆再次谈到了终结性及其对结果的影响。基本上,您是逐字节分解int的。
而整个shebang显然是在假设sizeof( int ) == 2,这在桌面计算机上是不正确的。。。相当长的一段时间,所以你可能想看一个更新的教程。;-)

关于c - 无法理解C中 union 程序的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27984583/

10-11 22:58
查看更多