1.介紹
????????union是一種特殊的數據類型,它允許你在同一塊內存區域中存儲不同的數據類型。它的主要目的是節省內存,尤其是在處理多種可能的數據類型,但一次只使用其中一種的場景。
2.特點
????????與?struct
(結構體)不同,結構體的每個成員都擁有自己獨立的內存空間,而聯合的所有成員都共享同一段內存。這意味著,你給一個成員賦值,會覆蓋其他成員的值(因為它們都使用相同的內存起始地址)。
????????一個聯合的大小至少等于其最大成員的大小,以確保能容納下任何一個成員。
3.使用方式
union UnionName {member_type1 member1;member_type2 member2;member_type3 member3;// ...
};
4.例子????????
#include <stdio.h>
#include <string.h>union Data {int i;float f;char str[20];
};int main() {union Data data;// 使用整數成員data.i = 10;printf("data.i : %d\n", data.i); // 輸出: data.i : 10// 使用浮點數成員 - 這會覆蓋 i 的內存data.f = 220.5;printf("data.f : %.2f\n", data.f); // 輸出: data.f : 220.50// 此時再讀取 data.i 將是無意義的值(是浮點數 220.5 的二進制解釋)printf("data.i (after setting f) : %d (nonsense)\n", data.i);// 使用字符數組成員 - 這會覆蓋之前所有的內存strcpy(data.str, "C Programming");printf("data.str : %s\n", data.str); // 輸出: data.str : C Programming// 此時讀取 i 或 f 都將是無意義的值printf("data.i (after setting str) : %d (nonsense)\n", data.i);printf("data.f (after setting str) : %.2f (nonsense)\n", data.f);return 0;
}
? ? ? ? 輸出結果:
data.i : 10
data.f : 220.50
data.i (after setting f) : 1100006400 (nonsense)
data.str : C Programming
data.i (after setting str) : 1819043147 (nonsense)
data.f (after setting str) : 9129985281638201200000000000000.00 (nonsense)