1. 程式人生 > 其它 >C語言:共用體

C語言:共用體

這是很基礎的教程,我只是寫給自己看,作為一個學習筆記記錄一下,如果正在閱讀的你覺得簡單,請不要批評,可以關掉選擇離開

如何學好一門程式語言

  • 掌握基礎知識,為將來進一步學習打下良好的基礎。
  • 上機實踐,通過大量的例題學習怎麼設計演算法,培養解題思路。
  • 養成良好的編碼習慣,註釋一定要寫,要不然保你一週後自己寫的程式碼都不認識了

  共用體允許我們在相同的記憶體位置儲存多個不同資料型別的成員,但是任何時候只能有一個成員帶有值。

共用體提供了一種使用相同的記憶體位置的有效方式。

定義共用體

  共用體的定義和結構體類似,共用體需要使用 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; }

我們發現共用體的if成員的值有損壞,因為最後賦給變數的值佔用了記憶體位置,這也是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;
}

在這裡,所有的成員都能完好輸出,因為同一時間只用到一個成員。

參考

菜鳥教程