列舉
列舉顧名思義就是一一枚舉。把可能的取值一一枚舉出來。
比如,現實生活中:
列舉的定義
enum day //星期
;enum *** //性別
;enum color //顏色
;
以上定義的 enum day,enum ***,enum color 都是列舉型別。
{}中的內容是列舉型別的可能取值,也叫列舉常量。這些可能取值都是有值的,預設從0開始,一次遞增1。比如:
typedef
enum color
color_t;
int main()
// 結果:red=0
// green=1
// blue=2
當然在定義的時候也可以賦初值。比如:
enum color;
int main()
//結果:red=2
// green=10
// blue=11
列舉的優點
增加**的可讀性和可維護性。
跟 #define 定義的識別符號比較列舉有型別檢查,更加嚴謹。
進行了封裝,防止了命名汙染。
便於除錯。
使用方便,一次可以定義多個常量。
聯合體聯合體的定義
聯合體也是一種特殊的自定義型別。
這種型別定義的變數也包含一系列的成員,特徵是這些成員共用同一塊記憶體空間(所以聯合體也叫共用體)。
比如:
//聯合型別的宣告
union un
;//聯合變數的定義
union un un;
//計算聯合變數的大小
printf("%d\n", sizeof(un)); // 4
聯合的特點
聯合的成員共用同一塊記憶體空間,這樣乙個聯合變數的大小,至少是最大成員的大小(因為聯合體至少得有能力儲存最大的那個成員)
union un
;int main()
聯合體大小的計算
例1:
union un1
;printf("%d\n", sizeof(union un1)); // 8
解析:
第一步,聯合體的大小至少是5;第二步,因為5不是最大對齊數4的倍數,所以就要讓它對齊到4的比5大的最小的倍數。即是8.
例2:
union un2
;printf("%d\n", sizeof(union un2)); // 16
解析:
第一步,聯合體的大小至少是14;第二步,因為14不是最大對齊數4的倍數,所以就要讓它對齊到4的比14大的最小的倍數。即是16.
例3:聯合體與結構體巧妙的結合
//將long型別的ip位址,轉換成點分十進位制的表示形式
union ip_addr
ip;};
int main()
// 結果:10.129.48.157
列舉和聯合體
1 什麼是列舉 列舉顧名思義就是一一枚舉。把可能的取值一一枚舉。enum color 顏色 以上定義的 enum color 是列舉型別。中的內容是列舉型別的可能取 值,也叫列舉常量 2 列舉的值enum color 顏色 3 列舉的優點 1 增加 的可讀性和可維護性 2 和 define定義的識別...
列舉 聯合體 遞迴
一.列舉 1.列舉是乙個型別 乙個常量陣列 2.關鍵字 enum 1 enum week 3.宣告乙個enum week w 那麼sizeof w 的大小是4 w可以等於以上七個裡面中的任意乙個 只能在範圍之內賦值 預設情況下 不賦值第乙個從0開始 mon 0 tue 1 以此類推 但例如對thu進...
結構體 聯合體 列舉
1 結構體struct 結構體的作用 在網路協議 通訊控制 嵌入式系統的c c 程式設計中,我們要傳送的不是簡單的位元組流 char型陣列 二是多種資料組合起來的乙個整體,其表現形式是乙個結構體。使用struct的注意事項 1 下面看乙個題目 結果 6 12 這裡涉及到結構體的記憶體對齊方式。1 關...