跳转至

union 联合体(先不看)

共享存储空间

联合体也可以定义多个成员,但这些成员共用同一段存储空间。

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

结构体的成员,可以同时保存各自的数据;联合体的成员,不能这样理解。

Data data;
data.num = 10;
cout << data.num; // 当前存的是num,输出10
data.symbol = 'A';
cout << data.symbol; // 现在存的是symbol,输出A

换成 symbol 后,不要再认为原来的 num 仍然保存着 10。

占用多少空间

sizeof(Data) 至少能放下最大的成员,还可能因为对齐而包含填充。

不是把所有成员的大小加起来,也不能认定永远恰好等于最大成员的大小。

联合体适合“同一时刻只需要保存其中一种数据”的情况,但程序要记清楚当前保存的是哪一种。

常见错误

写一个成员,却随意读另一个成员。

这不是通用的类型转换方法。本阶段先按“写哪个成员,就读哪个成员”来使用。

不能因为节省空间,就拿 union 代替所有 struct。

学生的姓名、学号、成绩需要同时存在,这种情况用结构体。