## 共用体 - 和结构体不同的是, 结构体的每个成员都是占用一块独立的存储空间, 而共用体所有的成员都占用同一块存储空间 - 和结构体一样, 共用体在使用之前必须先定义共用体类型, 再定义共用体变量 - 定义共用体类型格式: ```c union 共用体名{ 数据类型 属性名称; 数据类型 属性名称; ... .... }; ``` - 定义共用体类型变量格式: ```c union 共用体名 共用体变量名称; ``` - 特点: 由于所有属性共享同一块内存空间, 所以只要其中一个属性发生了改变, 其它的属性都会受到影响 - 示例: ```c union Test{ int age; char ch; }; union Test t; printf("sizeof(p) = %i\n", sizeof(t)); t.age = 33; printf("t.age = %i\n", t.age); // 33 t.ch = 'a'; printf("t.ch = %c\n", t.ch); // a printf("t.age = %i\n", t.age); // 97 ``` - 共用体的应用场景 + (1)通信中的数据包会用到共用体,因为不知道对方会发送什么样的数据包过来,用共用体的话就简单了,定义几种格式的包,收到包之后就可以根据包的格式取出数据。 + (2)节约内存。如果有2个很长的数据结构,但不会同时使用,比如一个表示老师,一个表示学生,要统计老师和学生的情况,用结构体就比较浪费内存,这时就可以考虑用共用体来设计。 +(3)某些应用需要大量的临时变量,这些变量类型不同,而且会随时更换。而你的堆栈空间有限,不能同时分配那么多临时变量。这时可以使用共用体让这些变量共享同一个内存空间,这些临时变量不用长期保存,用完即丢,和寄存器差不多,不用维护。 ## 最后,如果有任何疑问,请加微信 **leader_fengy** 拉你进学习交流群。 开源不易,码字不易,如果觉得有价值,欢迎分享支持。