C除了內建的基本型態,尚有陣列,以及這裡介紹的自訂資料型態類型等延伸資料型態。這裡淺談一些自己學習時的心得,不作詳細的語法說明。
- 結構所佔空間為所有成員型態大小的總合。定義結構時不可指定成員的初值。
- 聯合是以成員裡佔記憶體空間最大者為主,所以的成員共享最大的記憶體空間。當指定新的值給其中一個變數,其他成員變數的值不見得有意義。另外,成員變數在記憶體空間的對齊位置是靠右對齊,無關宣告時的先後順序,一律靠右。所以如果較大的變數已指定初值了,後續繼續指定佔較小空間的成員變數初值時,則會改變較大成員變數右邊的位元值。
- 列舉的作用像是宣告一組常數值。這組常數值可以直接取用,而要取用的變數不需要指定成相同型態的列舉變數。列舉的宣告方式為
enum 列舉名稱{
成員名稱,
成員名稱=常數值,
成員名稱,
……
}; - 位元欄位的定義方式與結構幾乎一致,唯在定義成員變數之時以 : 後接數字代表該成員變數所佔的位元數,如unsigned int x : 1;
即代表x佔1位元,另外成員變數的型態一定是unsigned int。 - 位元欄位裡的成員,按宣告的先後順序,代表在資料的位元順序,從最右邊開始抓取資料,依序向左移動。所以與聯合變數一起使用時,無論在聯合裡的宣告順序先後,都是從最右邊開始抓取聯合變數的位元資料。
- sizeof的大小和預期的不大一樣。