union perdata {
int class;
char office[10];
};
union perdata x, y; // 先定義後聲明
union perdata { ... } x, y; // 定義同時聲明
union { ... } x, y; // 匿名聯合直接聲明
| 特性 | 結構體 | 聯合體 |
|---|---|---|
| 成員共存 | 同時存在 | 互斥,同一時刻僅一成員有效 |
| 大小計算 | 所有成員大小之和(含對齊) | 最大成員大小(含對齊) |
| 示例大小 | int(2) + office[10] = 12+ | max(2, 10) = 10 字節 |
圖示:賦 int 用 2 字節,賦 office 用 10 字節,共用同一塊內存區域。
x.class、x.officex = 5; ❌x.class = 1; 後再 x.office = "abc"; 會覆蓋前值.(變量)、->(指針)struct {
char name[10];
int age;
char job; // 's' 學生 / 't' 教師
union {
int class; // 學生班級
char office[10]; // 教師教研室
} depa;
} body[2];
輸入時根據 job 決定讀取 depa.class 或 depa.office;輸出同理分支。注意:數組類型成員(name、office)scanf 時不加 &。
next),實現動態存儲:struct node { int data; struct node *next; };prev/next)、循環鏈表(尾指向頭)