c语言中的共用体问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 03:11:45
#include"stdio.h"
main()
{union{inta[2];
long b;
char c[4];
}s;
s.a[0]=0x39;
s.a[1]=0x38;
printf("%lx\n",s.b);
printf("%c\n",s.c[0]);}
答案是:380039和9,可我不知道为什么?请赐教!谢谢!

答案是 39 9 (我的电脑上运行的结果)
由共用体的定义,可以知道 s 占8个字节(该共用体中最长的是 int a[2])
前4个字节存放的是 0x39,后4个字节存放的是 0x38

输出长整型时,因为 long 占4个字节,所以输出 39

char型占一个字节,所以 s.c[0] 中存放的是前4个字节中的第一个,
存放的应该是 0x39,对应的 %d 是57,这个刚好是字符 '9' 的ASCII码,故输出为9。

这个要知道数在内存是如何存放的。