概念
由一系列具有相同数据类型或者不同数据类型的数据组成的集合,数据互斥关系,共用体所有的成员共同使用一份内存空间,其中空间的大小是按照共用体成员中所占的最大的内存空间的成员的空间进行分配,即同一个内存空间存放类型不同,但不同类型的变量共享一块空间。
与结构体的区别
1. 结构体元素有各自单独空间;共用体元素共享空间。
2.结构体元素互不影响,共用体赋值会导致覆盖(共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉)
3.结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存,即由最大类型确定。
代码展示
#include <stdio.h>
struct TestS
{
char Data1;
int Data2;
double Data3;
};
union TestU
{
char Data1;
int Data2;
double Data3;
};
int main()
{
struct TestS t1;
union TestU t2;
printf("结构体t1的大小是%d\n",sizeof(t1));
printf("结构体t1的大小是%d\n",sizeof(t2));
putchar('\n');
printf("Data1:%p\n",&t1.Data1);
printf("Data2:%p\n",&t1.Data2);
printf("Data3:%p\n",&t1.Data3);
putchar('\n');
printf("Data1:%p\n",&t2.Data1);
printf("Data1:%p\n",&t2.Data1);
printf("Data1:%p\n",&t2.Data1);
return 0;
}