聯合(union)
注意:命名開頭大寫!
它與結構的使用語法基本一樣,區別是結構的每個成員都有獨立的存儲空間,而聯合是所有成員共用一塊存儲空間(每個成員都從0地址開始),因此同一時刻只能有一個成員使用,只要有一個成員的值發生變化,其它成員的值也會隨之變化
注意:聯合的特點就是使用少量的內存對應多個標識符,使用它可以節約內存,在現代的編程中很少使用聯合(不再需要極端地節約內存了)
相關重點:
1、計算大小,不需要計算對齊(每個成員都從0開始,天然對齊),但要注意補齊
2、利用聯合判斷系統的大小端
小端:低位地址存儲低位數據(低存低,高存高)
大端:低位地址存儲高位數據(低存高,高存低)
eg. 0x01020304,且有地址0x18存儲4字節
01|02|03|04 -> 大端
04|03|02|01 -> 小段
注:數據左大右小,地址左低右高
eg.一聯合含char和int,用int存儲數據,用char讀取,因爲char只從0地址(低地址)讀取一位數據,看取得的是高位數據還是低位數據,就可以判斷大小端
d.num = 0x01020304;
if(d.ch == 0x01)
{
printf("大端");
}
else
{
printf("小端");
}
或 printf("%s",d.ch == 0x01 ? "大端" : "小端");
結果爲小端
注:絕大多數的個人計算機都是小端,而服務器、網絡設備都是大端(因此大端也叫:網絡字節序)