今天剛考完試,須要花些時間來折騰一下日常沒注意的地方,以避免翻車。code
在c語言中,struct用的較多,union用的較少(我的感受。。)衆所周知,struct結構體佔用的內存空間根據結構體裏的東西還有內存對齊方式等決定,而union根據我大一看的書說只是不保證你存入的值就是你到時候取出來的值,這兩天考試有個關於判斷大端小端的問題,正是利用聯合體實現的:內存
union { int a; char b; }c; c.a = 1; printf("%d", c.b);
那爲何這樣就能檢測出來cpu大小端呢?這一點就是聯合體的魅力。io
c.a =1;十六進制表示數據爲0x00000001;class
->>>>>>>>>>>>>>>>>>>>>>>>nio
int 00 00 00 01im
char 00cpu
int 01 00 00 00數據
char 01img
->>>>>>>>>>>>>>>>>>>>>>>>語言
若是機器是小端字節序的,那麼內存中數據排列爲01000000;
若是機器是大端字節序的,那麼內存中數據排列爲00000001;
聯合體中char和int共用空間
因爲我這個英特爾CPU,因此得出的結果爲1.