c語言 聯合問題

2021-08-25 11:20:07 字數 927 閱讀 9707

//在32位x86系統下

int main()

*s,a;

s = &a;

s->i[0] = 0x39;

s->i[1] = 0x38;

printf("%d",a.k);

//輸出結果為3839

return 0;

}

運用知識:聯合,大端小端,資料在記憶體中的儲存方式

聯合:多個變數共享一段記憶體,分配記憶體時以占用記憶體最大的變數分配記憶體

c語言中,預設是小端。

x86是小端模式。

下面以unsigned int value = 0x12345678為例,分別看看在兩種位元組序下其儲存情況,我們可以用unsigned char buf[4]來表示value

高位址  ---------------

buf[3] (0x78) -- 低位

buf[2] (0x56)

buf[1] (0x34)

buf[0] (0x12) -- 高位

---------------

低位址高位址  ---------------

buf[3] (0x12) -- 高位

buf[2] (0x34)

buf[1] (0x56)

buf[0] (0x78) -- 低位

--------------

低位址

高位址

------------

0x00 --高位

0x00

i[1] 0x38

i[0] 0x39 --低位

------------

低位址

所以最後輸出為 00003839;

歡迎指正!

C語言聯合

聯合使用關鍵字union,表示的一種量,只占用一塊記憶體,具體如何占用取決於型別最大的那個。比如int和float會選用float。聯合也可以和結構體結合起來用,也可以賦值,通過.屬性名的方式指定初始化器,對指定物件賦值,其他的不變。includetypedef union quantity typ...

C語言 列舉,聯合

7 列舉可以用來建立新的型別 8 列舉型別儲存區就是整數型別儲存區,列舉型別儲存區應該只能放有限的幾個整數 9 列舉型別也需要先宣告後定義,宣告使用enum關鍵字 10 宣告列舉型別的時候需要提供一組名稱,計算機為每個名稱分配乙個對應的整數,列舉型別只能存放這些整數 11 不同列舉型別所能記錄的整數...

C語言 聯合(union)

聯合 union 是一種資料型別,他能在同一塊空間中儲存不同資料型別,但不是同時儲存。如果我們想設計一種結構,其能儲存一些既無規律,也無順序的資料,那麼就可以用到聯合。建立聯合和建立結構體相同,需要宣告乙個模板,再用這個模板建立變數,下面給出例子 union stu 根據上面宣告,該結構可以儲存乙個...