跳转至

union 联合体

union 联合体是一种构造类型的数据结构,在一个联合体中可以定义多种不同的数据类型,和结构体相似。

union Data {
    int num;
    float value;
    char symbol;
};

union Data data;

联合体的各成员共享同一段存储。通常一次只有最近写入的成员处于活动状态;随意读取其他非活动成员并不是通用、可移植的类型转换方法。sizeof(Data) 至少能容纳最大成员,并可能因对齐要求包含填充。

结构体和联合体的区别在于:

  • 结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;
  • 缺点是struct内存空间的分配是粗放的,不管用不用,全分配。
  • 而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”;
  • 但优点是内存使用更为精细灵活,也节省了内存空间。