在使用帶有數(shù)字性質(zhì)的名稱時(shí)有的時(shí)候需要用到枚舉的方式進(jìn)行定義函數(shù)名字,按照對(duì)應(yīng)的數(shù)字格式來(lái)對(duì)應(yīng)相應(yīng)的名稱。枚舉成員的值是常量不是變量。
我們首先講解一下枚舉與結(jié)構(gòu)體的區(qū)分,結(jié)構(gòu)體是不同數(shù)據(jù)整合到一起形成的數(shù)據(jù)團(tuán),需要哪個(gè)結(jié)構(gòu)體中的成員按照結(jié)構(gòu)體成員的調(diào)用的方式即可。在枚舉中,枚舉中的成員都是按照從0,1,2...往下排的。
假如我們想告訴用戶今天是星期幾,可能按照正常的定義方式#define week num一個(gè)一個(gè)去定義,然后利用switch語(yǔ)句去查詢的方式實(shí)現(xiàn)代碼如下:
利用宏定義方式實(shí)現(xiàn)星期查詢
大家可以自己運(yùn)行代碼嘗試一下,這里結(jié)果不做展示。
這種方式實(shí)現(xiàn)查詢是沒(méi)有問(wèn)題的,但是過(guò)多的宏名定義占用資源而且讓代碼看起來(lái)非常冗余。C語(yǔ)言提供了一種枚舉(Enum)類型,能夠列出所有可能的取值,并給它們?nèi)∫粋€(gè)名字。
枚舉類型的定義
按照C語(yǔ)言的要求可以進(jìn)行如下定義
enum typeName { valueName1, valueName2, valueName3, ...... };
enum是一個(gè)新的關(guān)鍵字,專門用來(lái)定義枚舉類型;
typeName是枚舉類型的名字;
valueName1, valueName2, valueName3, ......是每個(gè)值對(duì)應(yīng)的名字的列表。
注意最后的;不能少。
還是按照之前的要求我們?nèi)ゲ樵兛蛻舻男瞧诳梢越⑷缦碌拿杜e:
enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
這里我們僅僅給出了名字,卻沒(méi)有給出名字對(duì)應(yīng)的值,這是因?yàn)槊杜e值默認(rèn)從 0 開(kāi)始,往后逐個(gè)加 1(遞增);也就是說(shuō),week 中的 Mon、Tues ...... Sun 對(duì)應(yīng)的值分別為 0、1 ...... 6。
枚舉數(shù)據(jù)的初始化
枚舉數(shù)據(jù)初始化的幾種方式
1.當(dāng)我們按照常規(guī)的定義時(shí),軟件默認(rèn)的枚舉成員從0開(kāi)始計(jì)數(shù)依次增加1;
2.在定義名稱時(shí)對(duì)成員進(jìn)行賦值(注意:這里賦值可以為負(fù)數(shù),枚舉取值類型:byte、sbyte、short、ushort、int、uint、long 或 ulong)實(shí)例代碼如下:
enum process{ pro1 = -5, pro2 = -3,pro3 = -1,pro4 = 5 };
3.如果我們需要建立的枚舉成員值是從某個(gè)數(shù)依次增加1,那只需要給第一個(gè)成員賦值即可,后面的成員值依次加一,示例代碼如下:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
4.枚舉是一種類型,通過(guò)它可以定義枚舉變量,在定義枚舉類型的同時(shí)定義變量:
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;
}
使用說(shuō)明
1) 枚舉列表中的 Mon、Tues、Wed 這些標(biāo)識(shí)符的作用范圍是全局的,不能再定義與它們名字相同的變量。
2) 枚舉中的成員都被替換成了對(duì)應(yīng)的數(shù)字,它們不占用數(shù)據(jù)區(qū)(常量區(qū)、全局?jǐn)?shù)據(jù)區(qū)、棧區(qū)和堆區(qū))的內(nèi)存,而是直接被編譯到命令里面,放到代碼區(qū),所以不能用&取得它們的地址,這就是枚舉的本質(zhì)。
使用枚舉完成實(shí)現(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)注
5082文章
19104瀏覽量
304805 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136686
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論