C語言:共用體
阿新 • • 發佈:2021-07-14
這是很基礎的教程,我只是寫給自己看,作為一個學習筆記記錄一下,如果正在閱讀的你覺得簡單,請不要批評,可以關掉選擇離開
如何學好一門程式語言
- 掌握基礎知識,為將來進一步學習打下良好的基礎。
- 上機實踐,通過大量的例題學習怎麼設計演算法,培養解題思路。
- 養成良好的編碼習慣,註釋一定要寫,要不然保你一週後自己寫的程式碼都不認識了
共用體允許我們在相同的記憶體位置儲存多個不同資料型別的成員,但是任何時候只能有一個成員帶有值。
共用體提供了一種使用相同的記憶體位置的有效方式。
定義共用體
共用體的定義和結構體類似,共用體需要使用 union 語句,格式為:
union [共同體標籤] { 成員定義; 成員定義; ... } [一個或多個共用體變數];
舉例說明:
union Data { int i; float f; char str[20]; } data;
共用體標籤和共用體變數是可選的,
共用體 佔用的記憶體等於 最大成員的儲存記憶體
#include <string.h> union Data{ int i; float f; char str[20]; }; int main(){ union Data data; char str_1[20]; float f_1; printf("資料佔用的記憶體: %d\n", sizeof(f_1)); // 4 printf("資料佔用的記憶體: %d\n", sizeof(str_1)); // 20 printf("資料佔用的記憶體: %d\n", sizeof(data)); // 20 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); // 1917853763 printf("data.f : %f\n", data.f); // 4122360580327794860452759994368.000000 printf("data.str : %s\n", data.str); // C Programming return 0; }
我們發現共用體的i和f成員的值有損壞,因為最後賦給變數的值佔用了記憶體位置,這也是str成員能夠完好輸出的原因。
現在讓我們再來看一個相同的例項,這次我們在同一時間只使用一個變數,這也演示了使用共用體的主要目的:
#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); // 10 data.f = 220.5; printf("data.f : %f\n", data.f); // 220.500000 strcpy(data.str, "C Programming"); printf("data.str : %s\n", data.str); //C Programming return 0; }
在這裡,所有的成員都能完好輸出,因為同一時間只用到一個成員。