聯合體是特殊的構造類型:其成員共享同一塊內存區域,同一時刻只能存儲一個成員的值。聯合體變量長度等於最大成員長度。這與結構體「各成員獨立佔用內存、總長度為成員長度之和」形成鮮明對比。
union 聯合體名 {
數據類型 成員名;
數據類型 成員名;
...
} 聯合體變量名;
union a_bc {
int i;
char mm;
};
union a_bc lgc; // 定義聯合體變量
// lgc 中 i 和 mm 共用同一內存地址
聯合體變量.成員名聯合體指針->成員名聯合體可嵌套於結構體,結構體也可作為聯合體成員:
struct {
int age;
char *addr;
union {
int i;
char *ch;
} x;
} y[10];
y[1].x.i — 訪問第 2 個結構體中聯合體的整型成員*y[2].x.ch — 訪問第 3 個結構體中聯合體字符串指針指向的首字符y[2].x.*ch — 錯誤寫法聯合體適用於「同一存儲空間在不同時刻存放不同類型數據」的場景:
注意:聯合體不提供類型安全,程序員需自行確保正確解讀當前存儲的數據類型。