列舉和聯合體

2021-08-25 02:28:58 字數 1798 閱讀 5739

列舉

列舉顧名思義就是一一枚舉。把可能的取值一一枚舉出來。

比如,現實生活中:

列舉的定義

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 關...