联合体和结构体一样也是构造类型,他的用法在很多方面也类似于结构体。
首先我们来看他的结构;
union 联合体名
{
成员
};
例如:
union AA
{
int a;
short b;
char c;
};
它也可以用typedef来起一个别名。
联合体的本质:所有成员共享一块空间。
联合体大小由最大成员决定。
验证:
#include<stdio.h>
union AA
{
int a;
short b;
char c;
};
int main()
{
union AA aa;
printf("%d\n", sizeof(aa));//4
//aa.a = 1;
//printf("%d\n", aa.a);//1
//printf("%d\n", aa.b);//1
//printf("%d\n", aa.c);//1
aa.b = 1;
printf("%d\n", aa.a);//乱码
printf("%d\n", aa.b);//1
printf("%d\n", aa.c);//1
//因为通过b赋值,是short类型,2字节,但a的类型为int,4字节,所以a会乱码,而c因为是char类型,1字节,所以不会乱码
printf("%p\n", &aa.a);//地址一样
printf("%p\n", &aa.b);
printf("%p\n", &aa.c);
return 0;
}