共用體是一種特殊的資料型別,允許您在相同的記憶體位置儲存不同的資料型別。您可以定義乙個帶有多成員的共用體,但是任何時候只能有乙個成員帶有值。共用體提供了一種使用相同的記憶體位置的有效方式。
為了定義共用體,您必須使用union語句,方式與定義結構類似。union 語句定義了乙個新的資料型別,帶有多個成員。union 語句的格式如下:
union [union tag] [one or more union variables];
union tag是可選的,每個 member definition 是標準的變數定義,比如 int i; 或者 float f; 或者其他有效的變數定義。在共用體定義的末尾,最後乙個分號之前,您可以指定乙個或多個共用體變數,這是可選的。下面定義乙個名為 data 的共用體型別,有三個成員 i、f 和 str:
union data data;
現在,data型別的變數可以儲存乙個整數、乙個浮點數,或者乙個字串。這意味著乙個變數(相同的記憶體位置)可以儲存多個多種型別的資料。您可以根據需要在乙個共用體內使用任何內建的或者使用者自定義的資料型別。
共用體占用的記憶體應足夠儲存共用體中最大的成員。例如,在上面的例項中,data 將占用 20 個位元組的記憶體空間,因為在各個成員中,字串所占用的空間是最大的。下面的例項將顯示上面的共用體占用的總記憶體大小:
#include #include union data ; int main( )
當上面的**被編譯和執行時,它會產生下列結果:
memory size occupied by data : 20為了訪問共用體的成員,我們使用成員訪問運算子(.)。成員訪問運算子是共用體變數名稱和我們要訪問的共用體成員之間的乙個句號。您可以使用union關鍵字來定義共用體型別的變數。下面的例項演示了共用體的用法:
#include #include union data ; int main( )
當上面的**被編譯和執行時,它會產生下列結果:
data.i : 1917853763在這裡,我們可以看到共用體的i和f成員的值有損壞,因為最後賦給變數的值占用了記憶體位置,這也是str成員能夠完好輸出的原因。現在讓我們再來看乙個相同的例項,這次我們在同一時間只使用乙個變數,這也演示了使用共用體的主要目的:data.f : 4122360580327794860452759994368.000000
data.str : c programming
#include #include union data ; int main( )
當上面的**被編譯和執行時,它會產生下列結果:
data.i : 10在這裡,所有的成員都能完好輸出,因為同一時間只用到乙個成員。data.f : 220.500000
data.str : c programming
C語言 共用體
共用體 typedef union strudent void fun union 列印 sizeof studend 2,data 0 0xfe,data 1 0xff,列印出0xff,暫時沒有理解 已理解 應該列印出0才對啊!如果jack.number 2 那麼列印 sizeof studend...
C語言 共用體
共用體 union define crt secure no warnings include include include union 共用體,構造資料型別,也叫聯合體,用途 十幾個不同型別的變數共佔一段記憶體 相互覆蓋 共用體在型別定義的時候並不分配記憶體,定義共用體變數的時候才分配記憶體 u...
C語言共用體
小甲魚共用體 1 用typedef定義型別 用typedef宣告新的型別名來代替已有的型別名 宣告integer為整型 typedef int integer 宣告結構型別 typedef struct date 宣告num為整型陣列型別 typedef int num 100 宣告string為字...