我知道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/