當多個資料需要共享記憶體或者多個資料每次只取其一時,可以利用聯合體(union)。
1)聯合體是乙個結構;
2)它的所有成員相對於基位址的偏移量都為0;
3)此結構空間要大到足夠容納最"寬"的成員;
4)其對齊方式要適合其中所有的成員;
下面解釋這四條描述:
由於聯合體中的所有成員是共享一段記憶體的,因此每個成員的存放首位址相對於於聯合體變數的基位址的偏移量為0,即所有成員的首位址都是一樣的。為了使得所有成員能夠共享一段記憶體,因此該空間必須足夠容納這些成員中最寬的成員。對於這句「對齊方式要適合其中所有的成員」是指其必須符合所有成員的自身對齊方式。
例:
union haxi
; haxi aha;
aha.a =
'a';
aha.b =
'b';
aha.c =
'c';
aha.a =
'd';
aha.d =1;
cout <<
sizeof
(aha)
<< endl;
printf
("a: %d\n"
, aha.a)
;printf
("a: %d, b:%d , c: %d\n"
, aha.a, aha.b, aha.c)
;printf
("d: %d\n"
, aha.d)
;輸出:4a:
1a:1, b:
1, c:1d:
1
改變其中乙個的值,呼叫其餘的值的時候輸出都是被改變的值,且初始化的時候只能給乙個屬性賦值。 union聯合體學習
union,中文名 聯合體 共用體 在某種程度上類似結構體struct的一種資料結構,共用體 union 和結構體 struct 同樣可以包含很多種資料型別和變數。不過區別也挺明顯 結構體 struct 中所有變數是 共存 的 優點是 有容乃大 全面 缺點是struct記憶體空間的分配是粗放的,不管...
union聯合體學習
union,中文名 聯合體 共用體 在某種程度上類似結構體struct的一種資料結構,共用體 union 和結構體 struct 同樣可以包含很多種資料型別和變數。不過區別也挺明顯 結構體 struct 中所有變數是 共存 的 優點是 有容乃大 全面 缺點是struct記憶體空間的分配是粗放的,不管...
聯合體union的用法
在c c 程式的編寫中,當多個基本資料型別或復合資料結構要占用同一片記憶體時,我們要使用聯合體 當多種型別,多個物件,多個事物只取其一時 我們姑且通俗地稱其為 n 選1 我們也 可以使用聯合體來發揮其長處。首先看一段 union myun u int k a int main union型別是共享記...