什么是共用体
- 和结构体不同的是,结构体的每个成员都是占用一块独立的存储空间,而共用体所有的成员都占用同一块存储空间。
- 和结构体一样,共用体在使用之前必须先定义共用体类型,再定义共用体变量。
定义共用体类型
union 共用体名{
数据类型 属性名称;
数据类型 属性名称;
......
};
特点: 由于所有属性共享同一块内存空间,所以只要其中一个属性发生了改变,其它的属性都会受到影响
定义共用体类型变量
union 共用体名 共用体变量名称;
示例
#include <stdio.h>
union Person {
char ch;
int age;
};
int main() {
union Person p1;
printf("sizeof = %i\n", sizeof(p1)); // 4
p1.age = 25;
printf("p1.age = %i\n", p1.age); // 25
p1.ch = 'a';
printf("p1.ch = %c\n", p1.ch); // a
printf("p1.age = %i\n", p1.age); // 97
return 0;
}
应用场景
- 通信中的数据包会用到共用体,因为不知道对方会发送什么样的数据包过来,用共用体定义几种格式的包,收到包之后就可以根据包的格式取出数据。
- 节约内存。如果有2个很长的数据结构,但不会同时使用,比如一个表示老师,一个表示学生,要统计老师和学生的情况,用结构体就比较浪费内存,这时就可以考虑用共用体来设计。
- 某些应用需要大量的临时变量,这些变量类型不同,而且会随时更换。而你的堆栈空间有限,不能同时分配那么多临时变量。这时可以使用共用体让这些变量共享同一个内存空间,这些临时变量不用长期保存,用完即丢,和寄存器差不多,不用维护。