共用体


什么是共用体

  • 和结构体不同的是,结构体的每个成员都是占用一块独立的存储空间,而共用体所有的成员都占用同一块存储空间
  • 和结构体一样,共用体在使用之前必须先定义共用体类型,再定义共用体变量。

定义共用体类型

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个很长的数据结构,但不会同时使用,比如一个表示老师,一个表示学生,要统计老师和学生的情况,用结构体就比较浪费内存,这时就可以考虑用共用体来设计。
  • 某些应用需要大量的临时变量,这些变量类型不同,而且会随时更换。而你的堆栈空间有限,不能同时分配那么多临时变量。这时可以使用共用体让这些变量共享同一个内存空间,这些临时变量不用长期保存,用完即丢,和寄存器差不多,不用维护。

文章作者: cfxin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 cfxin !
  目录