c語言學習筆記 共用體,大小端,和列舉

2021-10-19 17:27:52 字數 874 閱讀 3199

共用體

共用體是c中的一種資料結構,他的定義方法和使用方法與結構體相同,只需要在定義型別時將struct換為union即可

與結構體不同的是,聯合體中的記憶體空間是所有成員共用的,公用體的大小取決於共用體中最大的成員大小,共有體沒有對齊機制,即使當聯合體最大成員大小不足4位元組的倍數,編譯器也不會自動填充對齊

使用聯合體一般只是為了方便開發者閱讀,其成員型別代表了將會以何種方式解析這段記憶體資料,同樣的使用強制型別轉換也可以做到同樣的效果

大小端大小端指的是晶元在儲存資料中採用的格式

大段對應高位址存放低位元組

小端對應高位址存放高位元組

51核心架構的晶元採用的就是大端模式

arm晶元採用的就是小端模式

通過使用共用體和指標可以測試出當前機器使用的是大端還是小端

測試**的實現

union u1;

//共用體的方式本質還是通過指標實現檢測

//由於在int型別強制轉換為char型時,會將高位元組資料全部截掉,所以可以檢查低位址中存放的是不是1

//如果發現被擷取掉了,則是大端,低位元組存放在高位址中,反之則是小端

union u1 uni1;

uni1.a = 1;

printf("%d\n",uni1.b);

//指標方式

int a = 1;

ptr = &a;

printf("%d\n",*ptr);

列舉

列舉也是一種資料結構,其作用與巨集定義相似,都是為了減少閱讀障礙,提高程式的可讀性

列舉實際上就是定義了一堆型別為unsigned int的全域性變數,成員的大小預設從0開始,依次增加,如果只修改某乙個成員的值,那麼後面的成員則會以定義值為基數增加

C語言學習筆記 C共用體

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

C語言共用體 大小端 列舉

1.共用體和結構體的相同和不同 1 相同點就是操作語法幾乎相同。2 不同點是本質上的不同。struct是多個獨立元素 記憶體空間 打包在一起 union是乙個元素 記憶體空間 的多種不同解析方式。include 對同一位址資料的不同解析方法 union myunion struct mystruct...

C語言學習 十五 共用體

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