参考文档:
http://c.biancheng.net/view/2035.html
union (联合体)和 struct(结构体) 的用法较为类似,不同在于:
- union 所有成员共用一段内存,其占用内存总等于内部最大成员所占用的内存大小,修改一个成员会影响所有成员(即共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉);
- struct 每个成员占用自己的内存空间,其占用内存大于等于所有成员占用的内存之和,成员之间不会互相影响。
Union(联合体)
的定义格式为:
union unionName{
type1 elemName1;
type2 elemName2;
...
typen elemNameN;
};
N个成员共享 union unionName 所定义的变量的内存。
举个例子:
union 在内存中的分布要结合大小端来理解:
以上面的 data 为例,在小端机器中,各个成员在内存中的分布如下:
成员 n、ch、m 在内存中“对齐”到一头,对 ch 赋值修改的是前一个字节,对 m 赋值修改的是前两个字节,对 n 赋值修改的是全部字节。也就是说,ch、m 会影响到 n 的一部分数据,而 n 会影响到 ch、m 的全部数据。
在大端模式机器中,各个成员在内存中的分布如下:
版权声明:本文为u011807371原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。