(一)共用体类型的定义、变量定义和使用
- 共用体union和结构体struct在类型定义、变量定义、使用方法上很相似。
- 共用体和结构体的不同:结构体类似于一个包裹,结构体中的成员彼此是独立存在的,分布在内存的不同单元中,他们只是被打包成一个整体叫做结构体而已;共用体中的各个成员其实是一体的,彼此不独立,他们使用同一个内存单元。可以理解为:有时候是这个元素,有时候是那个元素。更准确的说法是同一个内存空间有多种解释方式。
- 共用体union就是对同一块内存中存储的二进制的不同的理解方式。
- 在有些书中把union翻译成联合(联合体),这个名字不好。现在翻译成共用体比较合适。
- union的sizeof测到的大小实际是union中各个元素里面占用内存最大的那个元素的大小。因为可以存的下这个就一定能够存的下其他的元素。
- union中的元素不存在内存对齐的问题,因为union中实际只有1个内存空间,都是从同一个地址开始的(开始地址就是整个union占有的内存空间的首地址),所以不涉及内存对齐。
(二)共用体和结构体的相同和不同
- 相同点就是操作语法几乎相同。
- 不同点是本质上的不同。struct是多个独立元素(内存空间)打包在一起;union是一个元素(内存空间)的多种不同解析方式。
- 实例
#include <stdio.h>
union myunion
{
int a;
char b;
};
int main(void)
{
union myunion xx;
printf("xx.a = %p.\n", &xx.a);
printf("xx.b = %p.\n", &xx.b);
printf("sizeof(xx) = %d.\n", sizeof(xx));
xx.a = 12;
printf("xx.a = %d.\n", xx.a);
xx.b = 22;
printf("xx.a = %d.\n", xx.a);
return 0;
}