1.共用體和結構體的相同和不同
(1)相同點就是操作語法幾乎相同。
(2)不同點是本質上的不同。struct是多個獨立元素(記憶體空間)打包在一起;union是乙個元素(記憶體空間)的多種不同解析方式。
#include//對同一位址資料的不同解析方法
union myunion
;struct
mystruct
;int main(void
)
輸出:(3).用指標方式描述共用體u1.a_add=0xbfb4e190
u1.b_add=0xbfb4e190
u1.b=2
s1.b=92
union myunion2.大小端;u1.a=1
;u1.b=1
;int a=1
;char b=*((char*)(&a));//用char型訪問a
大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:位址由小向大增加,而資料從高位往低位放;這和我們的閱讀習慣一致。
小端模式,是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中,這種儲存模式將位址的高低和資料位權有效地結合起來,高位址部分權值高,低位址部分權值低。
大部分情況下為小端模式,(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)不能用列舉的情況下(定義的常量符號之間無關聯,或者無限的)用巨集定義。
總結:巨集定義先出現,用來解決符號常量的問題;後來人們發現有時候定義的符號常量彼此之間有關聯(多選一的關係),用巨集定義來做雖然可以但是不貼切,於是乎發明了列舉來解決這種情況。
#includeenumweek
;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.宣告結構體...