C語言共用體 大小端 列舉

2022-04-07 19:03:42 字數 1542 閱讀 7587

1.共用體和結構體的相同和不同

(1)相同點就是操作語法幾乎相同。

(2)不同點是本質上的不同。struct是多個獨立元素(記憶體空間)打包在一起;union是乙個元素(記憶體空間)的多種不同解析方式。

#include//

對同一位址資料的不同解析方法

union myunion

;struct

mystruct

;int main(void

)

輸出:

u1.a_add=0xbfb4e190

u1.b_add=0xbfb4e190

u1.b=2

s1.b=92

(3).用指標方式描述共用體

union myunion

;u1.a=1

;u1.b=1

;int a=1

;char b=*((char*)(&a));//用char型訪問a

2.大小端

大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:位址由小向大增加,而資料從高位往低位放;這和我們的閱讀習慣一致。

小端模式,是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中,這種儲存模式將位址的高低和資料位權有效地結合起來,高位址部分權值高,低位址部分權值低。

大部分情況下為小端模式,(c51為大端)。

3.用**檢視大小端模式

#includeunion myunion

;void is_little_endian(void

)else

}void is_little_endian2(void) //

union 的本質

else

}int

main()

對同一位址裡的值用不同方式解析。

大端模式下,高位對應低位址。紅框代表char型解析資料為0;

小端模式下,低位對應低位址。紅框代表char型解析資料為1;

4.列舉

巨集定義和列舉的區別

(1)列舉是將多個有關聯的符號封裝在乙個列舉中,而巨集定義是完全散的。也就是說列舉其實是多選一。

(2)什麼情況下用列舉?當我們要定義的常量是乙個有限集合時(譬如一星期有7天,譬如乙個月有31天,譬如一年有12個月····),最適合用列舉。(其實巨集定義也行,但是列舉更好)

(3)不能用列舉的情況下(定義的常量符號之間無關聯,或者無限的)用巨集定義。

總結:巨集定義先出現,用來解決符號常量的問題;後來人們發現有時候定義的符號常量彼此之間有關聯(多選一的關係),用巨集定義來做雖然可以但是不貼切,於是乎發明了列舉來解決這種情況。

#includeenum

week

;int main(void

)

return0;

}

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

共用體 共用體是c中的一種資料結構,他的定義方法和使用方法與結構體相同,只需要在定義型別時將struct換為union即可 與結構體不同的是,聯合體中的記憶體空間是所有成員共用的,公用體的大小取決於共用體中最大的成員大小,共有體沒有對齊機制,即使當聯合體最大成員大小不足4位元組的倍數,編譯器也不會自...

c語言的結構體 共用體 列舉

struct s var struct s var1 結構體本身的開頭和結尾位址都是4位元組的整數倍 var2 結構體本身的開頭和結尾位址都是4位元組的整數倍 var3 結構體本身的開頭和結尾位址都是4位元組的整數倍 由此可見,元素的安放順序非常講究 offsetof type,member typ...

C語言基礎 結構體 共用體 列舉

struct 結構名 例 struct student 定義一種結構體型別 第一種方式 struct 結構名 變數名 例 struct student sam 定義struct student型別變數sam 注意struct student 結構體型別已經宣告定義,才能這麼使用 上面 2.宣告結構體...