自訂資料型態-結構、聯合和列舉之學習心得

C除了內建的基本型態,尚有陣列,以及這裡介紹的自訂資料型態類型等延伸資料型態。這裡淺談一些自己學習時的心得,不作詳細的語法說明。

  1. 結構所佔空間為所有成員型態大小的總合。定義結構時不可指定成員的初值。
  2. 聯合是以成員裡佔記憶體空間最大者為主,所以的成員共享最大的記憶體空間。當指定新的值給其中一個變數,其他成員變數的值不見得有意義。另外,成員變數在記憶體空間的對齊位置是靠右對齊,無關宣告時的先後順序,一律靠右。所以如果較大的變數已指定初值了,後續繼續指定佔較小空間的成員變數初值時,則會改變較大成員變數右邊的位元值。
  3. 列舉的作用像是宣告一組常數值。這組常數值可以直接取用,而要取用的變數不需要指定成相同型態的列舉變數。列舉的宣告方式為
    enum 列舉名稱{
    成員名稱,
    成員名稱=常數值,
    成員名稱,
    ……
    };
  4. 位元欄位的定義方式與結構幾乎一致,唯在定義成員變數之時以 : 後接數字代表該成員變數所佔的位元數,如unsigned int x : 1;
    即代表x1位元,另外成員變數的型態一定是unsigned int
  5. 位元欄位裡的成員,按宣告的先後順序,代表在資料的位元順序,從最右邊開始抓取資料,依序向左移動。所以與聯合變數一起使用時,無論在聯合裡的宣告順序先後,都是從最右邊開始抓取聯合變數的位元資料。
  6. sizeof的大小和預期的不大一樣。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Proudly using Dynamic Headers by Nicasio WordPress Design