C 语言里有关union的的一道题

来源:百度知道 编辑:UC知道 时间:2024/05/23 23:20:40
#include "stdio.h"
void main()
{
union{char s[2];
int i;
} a;
a.i=0x1234;
printf("%x,%x\n",a.s[0],a.s[1]);

}
帮我分析一下,谢谢,详细最好

打印出来的应该是ox34,0x12吧
%x的输出格式带0x吧?如果不带就去掉0x

因为int是4个字长的,char是1
所以s[2]应该对应的是int的前两个字节
而由于c++是小端机,低位在前
而0x1234在内存中的样子应该是
0x34 0x12, 0x00 0xoo
所以s[0]和s[1]分别指向了34和12

执行结果是
打印出 共同体a的S[0]和S[1]
S[0]和S[1]中的值是将I分成高。低字节中的值
顺便说一下。
a占用的空间为2,不是4