C語言學習筆記 C共用體

2021-09-26 06:28:56 字數 1711 閱讀 7221

共用體是一種特殊的資料型別,允許在相同的記憶體位置儲存不同的資料型別。可以定義乙個帶有多成員的共用體,但是任何時候只能有乙個成員帶有值。共用體提供了一種使用相同的記憶體位置的有效方式。

為了定義共用體,必須使用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

data.f : 4122360580327794860452759994368.000000

data.str : c programming

在這裡,我們可以看到共用體的i和f成員的值有損壞,因為最後賦給變數的值占用了記憶體位置,這也是str成員能夠完好輸出的原因。再看乙個相同的例項,在同一時間只使用乙個變數,也演示了使用共用體的主要目的:

#include #include union data; 

int main( )

當上面的**被編譯和執行時,會產生下列結果:

data.i : 10

data.f : 220.500000

data.str : c programming

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

結構體變數所佔記憶體長度是其中最大字段大小的整數倍。

共用體變數所佔的記憶體長度等於最長的成員變數的長度。

C語言學習 十五 共用體

共用體是一種特殊的資料型別,允許相同的記憶體位置儲存不同的資料型別,可以定義乙個帶有多成員的共用體,但是任何時候只能有乙個成員帶有值,共用體提供了一種使用相同的記憶體位置的有效方式.共用體的作用主要是節省記憶體.為了定義共用體,必須使用union語句,方式與定義結構類似,union語句定義了乙個新的...

C語言學習 結構體與共用體

結構體的一般形式為 struct 結構體名 用來標識 zh 乙個結構體 注意 這裡一定要寫分號 因為宣告結構體也是乙個c語言語句 宣告了乙個結構體,相當於構造了一種新的資料型別,此時系統並不為它分配記憶體空間,只有定義力結構體型別的變數,系統才為該變數分配記憶體空間,宣告了結構體後,就可以定義結構體...

C語言學習筆記之結構體與共用體

結構體 將不同型別的資料組合成乙個有機的整體,以便引用 結構體中的元素也可以為結構體型別的 for exmple num name age score addr 10010 lifei m 18 87.5 beijing 宣告乙個結構體變數的形式 struct 結構體名稱 結構體元素的輸出 結構體變...