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

参考文档:

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 的全部数据。 在大端模式机器中,各个成员在内存中的分布如下:

经验分享 程序员 微信小程序 职场和发展