C语言笔记 2- Union 和大小端

  • Post author:
  • Post category:其他


参考文档:

http://c.biancheng.net/view/2035.html

union (联合体)和 struct(结构体) 的用法较为类似,不同在于:

  1. union 所有成员共用一段内存,其占用内存总等于内部最大成员所占用的内存大小,修改一个成员会影响所有成员(即共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉);
  2. 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 版权协议,转载请附上原文出处链接和本声明。