在使用帶有數字性質的名稱時有的時候需要用到枚舉的方式進行定義函數名字,按照對應的數字格式來對應相應的名稱。枚舉成員的值是常量不是變量。
我們首先講解一下枚舉與結構體的區分,結構體是不同數據整合到一起形成的數據團,需要哪個結構體中的成員按照結構體成員的調用的方式即可。在枚舉中,枚舉中的成員都是按照從0,1,2...往下排的。
假如我們想告訴用戶今天是星期幾,可能按照正常的定義方式#define week num一個一個去定義,然后利用switch語句去查詢的方式實現代碼如下:
利用宏定義方式實現星期查詢
大家可以自己運行代碼嘗試一下,這里結果不做展示。
這種方式實現查詢是沒有問題的,但是過多的宏名定義占用資源而且讓代碼看起來非常冗余。C語言提供了一種枚舉(Enum)類型,能夠列出所有可能的取值,并給它們取一個名字。
枚舉類型的定義
按照C語言的要求可以進行如下定義
enum typeName { valueName1, valueName2, valueName3, ...... };
enum是一個新的關鍵字,專門用來定義枚舉類型;
typeName是枚舉類型的名字;
valueName1, valueName2, valueName3, ......是每個值對應的名字的列表。
注意最后的;不能少。
還是按照之前的要求我們去查詢客戶的星期可以建立如下的枚舉:
enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
這里我們僅僅給出了名字,卻沒有給出名字對應的值,這是因為枚舉值默認從 0 開始,往后逐個加 1(遞增);也就是說,week 中的 Mon、Tues ...... Sun 對應的值分別為 0、1 ...... 6。
枚舉數據的初始化
枚舉數據初始化的幾種方式
1.當我們按照常規的定義時,軟件默認的枚舉成員從0開始計數依次增加1;
2.在定義名稱時對成員進行賦值(注意:這里賦值可以為負數,枚舉取值類型:byte、sbyte、short、ushort、int、uint、long 或 ulong)實例代碼如下:
enum process{ pro1 = -5, pro2 = -3,pro3 = -1,pro4 = 5 };
3.如果我們需要建立的枚舉成員值是從某個數依次增加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 這些標識符的作用范圍是全局的,不能再定義與它們名字相同的變量。
2) 枚舉中的成員都被替換成了對應的數字,它們不占用數據區(常量區、全局數據區、棧區和堆區)的內存,而是直接被編譯到命令里面,放到代碼區,所以不能用&取得它們的地址,這就是枚舉的本質。
使用枚舉完成實現星期幾的查詢代碼如下:
#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;
}
審核編輯:符乾江 -
嵌入式
+關注
關注
5085文章
19138瀏覽量
305682 -
C語言
+關注
關注
180文章
7605瀏覽量
136992
發布評論請先 登錄
相關推薦
評論