《程序編譯流程與 GCC 編譯器》
《C 語言編程 — 基本語法》
《C 語言編程 — 基本數據類型》
《C 語言編程 — 變量與常量》
《C 語言編程 — 運算符》
《C 語言編程 — 邏輯控制語句》
《C 語言編程 — 函數》
《C 語言編程 — 高級數據類型 — 指針》
《C 語言編程 — 高級數據類型 — 數組》
《C 語言編程 — 高級數據類型 — 字符串》
《C 語言編程 — 高級數據類型 — 枚舉》
《C 語言編程 — 高級數據類型 — 結構體與位域》編程
共用體是一種特殊的數據類型,容許在相同的內存空間存儲不一樣的數據類型。共用體具備多個成員,但同一時刻只能有一個成員被賦值。共用體提供了一種使用相同的內存空間的有效方式。數組
使用 union 關鍵字定義共用體類型:ide
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];
int i;
。union Data { int i; float f; char str[20]; } data;
如今,Data 共用體類型的變量能夠存儲一個整數、或一個浮點數,或一個字符串,這些數值都會存儲在同一個內存空間,但同一時刻只會有一個數值存在,共用體佔用的內存空間爲共用體中最大的成員的空間。能夠根據須要在一個共用體內使用任何內置的或用戶自定義的數據類型。函數
下面的實例顯示共用體佔用的總內存大小:spa
#include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main() { union Data data; printf("Memory size occupied by data : %lu\n", sizeof(data)); return 0; }訪問共用體成員
依舊是使用成員訪問運算符 .
。指針
#include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main() { union Data data; data.i = 10; data.f = 220.5; strcpy(data.str, "C Programming"); printf("data.i : %d\n", data.i); printf("data.f : %f\n", data.f); printf("data.str : %s\n", data.str); return 0; }
運行:code
$ ./main data.i : 1917853763 data.f : 4122360580327794860452759994368.000000 data.str : C Programming
上述可見 data.i
和 data.f
的數值被損壞了,這是由於最後賦值的共用體變量成員 str 將 i 和 f 的內存空間覆蓋了。內存
共用體正確的使用方法以下:字符串
#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.f = 220.5; printf( "data.f : %f\n", data.f); strcpy( data.str, "C Programming"); printf( "data.str : %s\n", data.str); return 0; }
運行:編譯器
$ ./main data.i : 10 data.f : 220.500000 data.str : C Programming