C語言之聯合體Union

2021-10-06 04:03:56 字數 1882 閱讀 7955

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

定義共用體union

為了定義共用體,您必須使用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 個位元組的記憶體空間,因為在各個成員中,字串所占用的空間是最大的

為了訪問共用體的成員,我們使用成員訪問運算子(.)。成員訪問運算子是共用體變數名稱和我們要訪問的共用體成員之間的乙個句號。您可以使用union關鍵字來定義共用體型別的變數。

下面的例項演示了共用體的用法:

#include

#include

union data

;int

main()

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

//錯誤操作的結果

data.i :

1917853763

data.f :

4122360580327794860452759994368.000000

data.str : c programming

//正確操作的結果

data.i :

10data.f :

220.500000

data.str : c programming

共用體的定義和結構體類似,但是本質是對同一款記憶體的不同操作方式,因為是同一塊記憶體的同一時刻只可以給乙個變數使用,所以在使用時切記同一時間只能使用共用體中的乙個成員!

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

共用體變數所佔的記憶體長度等於最長的成員變數的長度。例如,教程中定義的共用體data各佔20個位元組(因為char str[20]變數佔20個位元組),而不是各佔4+4+20=28個位元組。

union data   //佔20個位元組

data;

union datadata;

程式設計時經常會需要判斷機器是大端機還是小端機,此時使用union就非常方便:

union

;data=

0x01020304;if

(str==

0x01

)else

if(str==

0x04

)else

c語言 union聯合體

linux中聯合體union實現判斷little endian 和 big endian 大端和小端 1 聯合體的資料成員從低位元組開始對齊 2 little endian 和 big endian。little endian 和 big endian 是 cpu 存放資料的兩種不同順序。對於整型 ...

C語言聯合體union

c語言中的聯合體union 在c c 程式的編寫中,當多個基本資料型別或復合資料結構要占用同一片記憶體時,我們要使用聯合體 當多種型別,多個物件,多個事物只取其一時 我們姑且通俗地稱其為 n 選1 我們也 可以使用聯合體來發揮其長處。首先看一段 union myun u int k a int ma...

C語言之聯合體

聯合體,就是將幾種資料型別聯合起來的一種資料結構,但是它們共用乙個空間。怎麼理解呢?川劇變臉見過沒,就是來來回回的變來變去,給人看的眼花繚亂的,但是不管你怎麼變,面具下的臉卻始終不變。同樣的道理,各種資料型別就是各種臉譜,對外展現了不同的形象,唯一不變的就是它的記憶體空間的二進位制資料始終都是一樣的...