C语言 公用体

来源:百度知道 编辑:UC知道 时间:2024/05/27 01:10:11
union
{ int x;
struct
{ char c1;
char c2;
}b;
}a;
执行语句:a.x = 0x1234之后,a.b.c1的值为34 ; a.b.c2的值为12
为什么呢?

这是因为你用的计算机是小段模式了,简单地说就是低地址在低端,高地址在高端了。所以小-大是:3412.
在共用体中b和x公用一个4字节地址。所以有上面结果了。

没有a.b吧,共用就是说a.x用了,a.b再用就覆盖了a.x的值,所以就这样了吧

结构体的成员是共享内存空间的。结构体的大小就是最大的那个成员的大小。

a的大小就是int x的大小,4字节。x在内存中是34 12 00 00

另一个成员b只有2字节,这2字节就是x的低2字节。

所以c1=0x34

公用体内部的数据共占同一内存区
本例中,
x大小为字节
结构体b大小也为两个字节,其中c1为低字节,c2为高字节.
x和结构体b共同占相同的两个字节,如图:
高位 低位
X
-------- --------
c2 c1

则a.x = 0x1234之后,上图中的前个"--------"内存区放0x12,后一个放0x34;
所以a.b.c2=0x12,a.b.c1=0x34