C語言基礎 - 共用體

C共用體

共用體是一種特殊的數據類型,允許您在相同的內存位置存儲不同的數據類型。

定義共用體

定義共用體必須使用union關鍵字,方式與定義結構體類似。

rule:
union [union tag]
{
   member definition;
   member definition;
   ...
   member definition;
} [one or more union variables];

union tag 是可選的

union Data
{
   int i;
   float f;
   char  str[20];
} data;

現在,Data 類型的變量可以存儲一個整數、一個浮點數,或者一個字符串。這意味着一個變量(相同的內存位置)可以存儲多個多種類型的數據。

共用體佔用的內存應足夠存儲共用體中最大的成員。

#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 : %d\n", sizeof(data));

   return 0;
}

輸出結果:Memory size occupied by data : 20

訪問共用體成員

我們使用成員訪問運算符(.)來訪問共用體成員。

#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;
}

輸出結果:
    data.i : 1917853763
    data.f : 4122360580327794860452759994368.000000
    data.str : C Programming

可以看出,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;
}
輸出結果:
data.i : 10
data.f : 220.500000
data.str : C Programming

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

注意

  • 結構體與共用體

    結構體變量所佔內存長度是各成員佔的內存長度之和。每個成員分別佔有其自己的內存單元。共用體變量所佔的內存長度等於最長的成員變量的長度。

  • 共用體作用

    節省內存,有兩個很長的數據結構,不會同時使用。用共用體的話,只佔用最長的那個數據結構所佔用的空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章