C語言中enum關(guān)鍵字的實(shí)現(xiàn)示例
在 C 語言中,有一種基本數(shù)據(jù)類型叫做枚舉類型,它用于定義一組具有離散值的常量,可以讓數(shù)據(jù)更簡潔,更易讀。枚舉類型通常用于為程序中的一組相關(guān)的常量取名字,以便于程序的可讀性和維護(hù)性。本文將介紹 C 語言中的 enum 關(guān)鍵字,它是用來定義枚舉類型的。
定義枚舉類型
要定義一個(gè)枚舉類型,需要使用 enum 關(guān)鍵字,后面跟著枚舉類型的名稱,以及用大括號(hào) {} 括起來的一組枚舉常量。每個(gè)枚舉常量可以用一個(gè)標(biāo)識(shí)符來表示,也可以為它們指定一個(gè)整數(shù)值,如果沒有指定,那么默認(rèn)從 0 開始遞增。枚舉語法定義格式為:
enum 枚舉名 { 枚舉元素1, 枚舉元素2, ... };
例如,我們可以定義一個(gè)表示一周七天的枚舉類型,如下:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
這里,我們?yōu)榈谝粋€(gè)枚舉元素 MON 指定了值為 1,那么后面的枚舉元素的值就依次遞增,即 TUE 為 2,WED 為 3,依此類推。如果我們不指定任何枚舉元素的值,那么默認(rèn)從 0 開始,即 MON 為 0,TUE 為 1,等等。
我們也可以在定義枚舉類型時(shí)改變枚舉元素的值,例如:
enum SEASON { SPRING, SUMMER=3, AUTUMN, WINTER };
這里,我們?yōu)?SUMMER 指定了值為 3,那么后面的枚舉元素的值就在前一個(gè)元素的基礎(chǔ)上加 1,即 AUTUMN 為 4,WINTER 為 5。注意,前面的枚舉元素 SPRING 的值仍然是默認(rèn)的 0。
定義枚舉變量
定義了枚舉類型后,我們就可以用它來定義枚舉變量,用來存儲(chǔ)枚舉類型的值。我們可以通過以下三種方式來定義枚舉變量:
先定義枚舉類型,再定義枚舉變量
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day;
定義枚舉類型的同時(shí)定義枚舉變量
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;
省略枚舉名稱,直接定義枚舉變量
enum { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;
注意,同一個(gè)程序中不能定義同名的枚舉類型,不同的枚舉類型中也不能存在同名的枚舉元素。例如,以下兩種聲明都是錯(cuò)誤的:
// 錯(cuò)誤聲明一:存在同名的枚舉類型 enum WEEKDAY { MON, TUE, WED, THU, FRI }; enum WEEKDAY { SAT, SUN }; // 錯(cuò)誤聲明二:存在同名的枚舉元素 enum WEEKDAY { MON, TUE, WED, THU, FRI }; enum WEEKEND { SAT, SUN, MON };
使用枚舉類型的變量
定義了枚舉變量后,我們就可以對(duì)它進(jìn)行賦值和使用了。有以下幾點(diǎn)需要注意:
對(duì)枚舉變量賦值時(shí),可以直接使用枚舉元素的標(biāo)識(shí)符,也可以使用整數(shù)值,但是需要進(jìn)行類型轉(zhuǎn)換。例如:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day; day = WED; // 直接使用枚舉元素 day = (enum DAY) 3; // 使用整數(shù)值,需要類型轉(zhuǎn)換
使用枚舉變量時(shí),可以將它作為整數(shù)值來處理,也可以用它來進(jìn)行條件判斷或 switch 語句。例如:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day; day = WED; printf("%d\n", day); // 輸出 3 if (day == WED) { printf("Today is Wednesday\n"); // 輸出 Today is Wednesday } switch (day) { case MON: printf("Monday\n"); break; case TUE: printf("Tuesday\n"); break; case WED: printf("Wednesday\n"); break; case THU: printf("Thursday\n"); break; case FRI: printf("Friday\n"); break; case SAT: printf("Saturday\n"); break; case SUN: printf("Sunday\n"); break; default: printf("Invalid day\n"); }
在 C 語言中,枚舉類型是被當(dāng)做 int 或者 unsigned int 類型來處理的,所以按照 C 語言規(guī)范是沒有辦法遍歷枚舉類型的。不過在一些特殊的情況下,枚舉類型必須連續(xù)是可以實(shí)現(xiàn)有條件的遍歷。例如:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day; // 遍歷枚舉元素 for (day = MON; day <= SUN; day++) { printf("枚舉元素:%d\n", day); }
枚舉類型的大小
在 C 語言中,枚舉類型的大小是由編譯器決定的,一般來說,它是按照 int 型或者 unsigned int 型來存儲(chǔ)的,所以它的大小通常是 4 個(gè)字節(jié)。我們可以用 sizeof 運(yùn)算符來查看枚舉類型的大小,例如:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day; printf("sizeof enum DAY: %d\n", sizeof(enum DAY)); // 輸出 4 printf("sizeof day: %d\n", sizeof(day)); // 輸出 4
枚舉類型和 #define 宏的區(qū)別
最后,我們來看看枚舉類型和 #define 宏的區(qū)別,它們都可以用來定義一組常量,但是有以下幾點(diǎn)不同:
- #define 宏常量是在預(yù)編譯階段進(jìn)行簡單替換,枚舉常量則是在編譯的時(shí)候確定其值。
- 一般在編譯器里,可以調(diào)試枚舉常量,但是不能調(diào)試宏常量。
- 枚舉可以一次定義大量相關(guān)的常量,而 #define 宏一次只能定義一個(gè)。
總之,枚舉類型是 C 語言中的一種有用的數(shù)據(jù)類型,它可以讓我們的程序更加清晰和規(guī)范,也可以避免一些魔法數(shù)字的出現(xiàn)。
到此這篇關(guān)于C語言中enum關(guān)鍵字的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C語言 enum關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言數(shù)據(jù)類型和格式說明符基礎(chǔ)教程示例
這篇文章主要為大家介紹了C語言數(shù)據(jù)類型和格式說明符基礎(chǔ)教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Qt編寫地圖實(shí)現(xiàn)動(dòng)態(tài)點(diǎn)位標(biāo)注的示例代碼
動(dòng)態(tài)點(diǎn)位標(biāo)注是定制的一個(gè)功能模塊,提供直接地圖上選點(diǎn)設(shè)置標(biāo)記點(diǎn),點(diǎn)位信息用結(jié)構(gòu)體存儲(chǔ),其中包括了經(jīng)度、緯度、速度、時(shí)間等信息。本文將介紹實(shí)現(xiàn)這一功能的示例代碼,需要的可以參考一下2022-01-01C++如何實(shí)現(xiàn)定長內(nèi)存池詳解
內(nèi)存池根據(jù)存儲(chǔ)的元素的長度是否可變,分為變長,與定長兩種內(nèi)存池,這篇文章主要給大家介紹了關(guān)于C++如何實(shí)現(xiàn)定長內(nèi)存池的相關(guān)資料,需要的朋友可以參考下2021-09-09C++ vector在多線程操作中出現(xiàn)內(nèi)存錯(cuò)誤問題及解決
這篇文章主要介紹了C++ vector在多線程操作中出現(xiàn)內(nèi)存錯(cuò)誤問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08