在使用帶有數(shù)字性質(zhì)的名稱時有的時候需要用到枚舉的方式進行定義函數(shù)名字,按照對應(yīng)的數(shù)字格式來對應(yīng)相應(yīng)的名稱。枚舉成員的值是常量不是變量。
我們首先講解一下枚舉與結(jié)構(gòu)體的區(qū)分,結(jié)構(gòu)體是不同數(shù)據(jù)整合到一起形成的數(shù)據(jù)團,需要哪個結(jié)構(gòu)體中的成員按照結(jié)構(gòu)體成員的調(diào)用的方式即可。在枚舉中,枚舉中的成員都是按照從0,1,2...往下排的。
假如我們想告訴用戶今天是星期幾,可能按照正常的定義方式#define week num一個一個去定義,然后利用switch語句去查詢的方式實現(xiàn)代碼如下:
![poYBAGId5zWAM5VuAABvCUVJRFA974.png](http://file.elecfans.com/web2/M00/33/55/poYBAGId5zWAM5VuAABvCUVJRFA974.png)
利用宏定義方式實現(xiàn)星期查詢
大家可以自己運行代碼嘗試一下,這里結(jié)果不做展示。
這種方式實現(xiàn)查詢是沒有問題的,但是過多的宏名定義占用資源而且讓代碼看起來非常冗余。C語言提供了一種枚舉(Enum)類型,能夠列出所有可能的取值,并給它們?nèi)∫粋€名字。
枚舉類型的定義
按照C語言的要求可以進行如下定義
enum typeName { valueName1, valueName2, valueName3, ...... };
enum是一個新的關(guān)鍵字,專門用來定義枚舉類型;
typeName是枚舉類型的名字;
valueName1, valueName2, valueName3, ......是每個值對應(yīng)的名字的列表。
注意最后的;不能少。
還是按照之前的要求我們?nèi)ゲ樵兛蛻舻男瞧诳梢越⑷缦碌拿杜e:
enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
這里我們僅僅給出了名字,卻沒有給出名字對應(yīng)的值,這是因為枚舉值默認從 0 開始,往后逐個加 1(遞增);也就是說,week 中的 Mon、Tues ...... Sun 對應(yīng)的值分別為 0、1 ...... 6。
枚舉數(shù)據(jù)的初始化
枚舉數(shù)據(jù)初始化的幾種方式
1.當(dāng)我們按照常規(guī)的定義時,軟件默認的枚舉成員從0開始計數(shù)依次增加1;
2.在定義名稱時對成員進行賦值(注意:這里賦值可以為負數(shù),枚舉取值類型:byte、sbyte、short、ushort、int、uint、long 或 ulong)實例代碼如下:
enum process{ pro1 = -5, pro2 = -3,pro3 = -1,pro4 = 5 };
3.如果我們需要建立的枚舉成員值是從某個數(shù)依次增加1,那只需要給第一個成員賦值即可,后面的成員值依次加一,示例代碼如下:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
4.枚舉是一種類型,通過它可以定義枚舉變量,在定義枚舉類型的同時定義變量:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;
有了枚舉變量,就可以把列表中的值賦給它:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a = Mon, b = Wed, c = Sat;
或者:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;
#include
int main(){
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;
scanf("%d", &day);
switch(day){
case Mon: puts("Monday"); break;
case Tues: puts("Tuesday"); break;
case Wed: puts("Wednesday"); break;
case Thurs: puts("Thursday"); break;
case Fri: puts("Friday"); break;
case Sat: puts("Saturday"); break;
case Sun: puts("Sunday"); break;
default: puts("Error!");
}
return 0;
}
使用說明
1) 枚舉列表中的 Mon、Tues、Wed 這些標(biāo)識符的作用范圍是全局的,不能再定義與它們名字相同的變量。
2) 枚舉中的成員都被替換成了對應(yīng)的數(shù)字,它們不占用數(shù)據(jù)區(qū)(常量區(qū)、全局數(shù)據(jù)區(qū)、棧區(qū)和堆區(qū))的內(nèi)存,而是直接被編譯到命令里面,放到代碼區(qū),所以不能用&取得它們的地址,這就是枚舉的本質(zhì)。
使用枚舉完成實現(xiàn)星期幾的查詢代碼如下:
#include
int main(){
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;
scanf("%d", &day);
switch(day){
case 1: puts("Monday"); break;
case 2: puts("Tuesday"); break;
case 3: puts("Wednesday"); break;
case 4: puts("Thursday"); break;
case 5: puts("Friday"); break;
case 6: puts("Saturday"); break;
case 7: puts("Sunday"); break;
default: puts("Error!");
}
return 0;
}
審核編輯:符乾江 -
嵌入式
+關(guān)注
關(guān)注
5095文章
19189瀏覽量
307976 -
C語言
+關(guān)注
關(guān)注
180文章
7615瀏覽量
137829
發(fā)布評論請先 登錄
相關(guān)推薦
C語言中枚舉的基本概念和常見用法
詳細講解c語言enum枚舉類型
C語言0基礎(chǔ)入門精講視頻教程分享
51單片機C語言應(yīng)用程序設(shè)計實例精講part03
51單片機C語言應(yīng)用程序設(shè)計實例精講(第二版)part05
51單片機C語言應(yīng)用程序設(shè)計實例精講(第二版)part06
MSP430單片機C語言應(yīng)用程序設(shè)計實例精講一書中的程序
51單片機C語言應(yīng)用程序?qū)嵗?b class='flag-5'>精講的代碼合集免費下載
![51單片機<b class='flag-5'>C</b><b class='flag-5'>語言</b>應(yīng)用程序?qū)嵗?b class='flag-5'>精</b><b class='flag-5'>講</b>的代碼合集免費下載](https://file.elecfans.com/web1/M00/B3/A5/pIYBAF4ezeqAP-GAAATLuLPitKY147.png)
評論