1.enum

創(chuàng)新互聯(lián)是一家網(wǎng)站設(shè)計(jì)公司,集創(chuàng)意、互聯(lián)網(wǎng)應(yīng)用、軟件技術(shù)為一體的創(chuàng)意網(wǎng)站建設(shè)服務(wù)商,主營(yíng)產(chǎn)品:響應(yīng)式網(wǎng)站開(kāi)發(fā)、品牌網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷推廣。我們專注企業(yè)品牌在網(wǎng)站中的整體樹(shù)立,網(wǎng)絡(luò)互動(dòng)的體驗(yàn),以及在手機(jī)等移動(dòng)端的優(yōu)質(zhì)呈現(xiàn)。網(wǎng)站制作、成都做網(wǎng)站、移動(dòng)互聯(lián)產(chǎn)品、網(wǎng)絡(luò)運(yùn)營(yíng)、VI設(shè)計(jì)、云產(chǎn)品.運(yùn)維為核心業(yè)務(wù)。為用戶提供一站式解決方案,我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶,為客戶提供賞析悅目的作品,網(wǎng)站的價(jià)值服務(wù)。
枚舉的定義
枚舉類型定義的一般形式為:
enum 枚舉名{ 枚舉值表 };
在枚舉值表中應(yīng)羅列出所有可用值。這些值也稱為枚舉元素。
例如:
該枚舉名為weekday,枚舉值共有7個(gè),即一周中的七天。凡被說(shuō)明為weekday類型變量的取值只能是七天中的某一天。
2.
枚舉變量的說(shuō)明
如同結(jié)構(gòu)和聯(lián)合一樣,枚舉變量也可用不同的方式說(shuō)明,即先定義后說(shuō)明,同時(shí)定義說(shuō)明或直接說(shuō)明。
設(shè)有變量a,b,c被說(shuō)明為上述的weekday,可采用下述任一種方式:
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a,b,c;
或者為:
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者為:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;
3、枚舉類型變量的賦值和使用
枚舉類型在使用中有以下規(guī)定:
a.
枚舉值是常量,不是變量。不能在程序中用賦值語(yǔ)句再對(duì)它賦值。
例如對(duì)枚舉weekday的元素再作以下賦值:
sun=5;
mon=2;
sun=mon;
都是錯(cuò)誤的。
b.
枚舉元素本身由系統(tǒng)定義了一個(gè)表示序號(hào)的數(shù)值,從0開(kāi)始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1,…,sat值為6。
int main(){
enum weekday
{ sun,mon,tue,wed,thu,fri,sat } a,b,c;
a=sun;
b=mon;
c=tue;
printf("%d,%d,%d",a,b,c);
return 0;
}
說(shuō)明:
只能把枚舉值賦予枚舉變量,不能把元素的數(shù)值直接賦予枚舉變量。如:
a=sum;
b=mon;
是正確的。而:
a=0;
b=1;
是錯(cuò)誤的。如一定要把數(shù)值賦予枚舉變量,則必須用強(qiáng)制類型轉(zhuǎn)換。
如:a=(enum
weekday)2;
其意義是將順序號(hào)為2的枚舉元素賦予枚舉變量a,相當(dāng)于:
a=tue;
還應(yīng)該說(shuō)明的是枚舉元素不是字符常量也不是字符串常量,使用時(shí)不要加單、雙引號(hào)。
int main(){
enum body
{ a,b,c,d } month[31],j;
int i;
j=a;
for(i=1;i=30;i++){
month[i]=j;
j++;
if (jd) j=a;
}
for(i=1;i=30;i++){
switch(month[i])
{
case a:printf(" %2d %c\t",i,'a'); break;
case b:printf(" %2d %c\t",i,'b'); break;
case c:printf(" %2d %c\t",i,'c'); break;
case d:printf(" %2d %c\t",i,'d'); break;
default:break;
}
}
printf("\n");
return 0;
}
枚舉類型可以理解為一個(gè)集合,枚舉成員是集合內(nèi)的一些帶有名字的整型常量,成員之間用逗號(hào)隔開(kāi)。枚舉的名字可有可無(wú),只是一個(gè)標(biāo)識(shí)。枚舉中, 第一個(gè)枚舉成員默認(rèn)值為整型的0,后續(xù)枚舉成員的值在前一個(gè)成員上加1。當(dāng)然也可以人為設(shè)定枚舉成員的初始值。例如enum Person { Man, Women}; enum Person { Man=1, Women}; 通常用枚舉來(lái)列舉一些有限數(shù)量的變量,也就是可列舉的變量,例如一周七天,就可以用枚舉實(shí)現(xiàn)。
在實(shí)際編程中,有些數(shù)據(jù)的取值往往是有限的,只能是非常少量的整數(shù),并且最好為每個(gè)值都取一個(gè)名字,以方便在后續(xù)代碼中使用,比如一個(gè)星期只有七天,一年只有十二個(gè)月,一個(gè)班每周有六門(mén)課程等。
以每周七天為例,我們可以使用 #define 命令來(lái)給每天指定一個(gè)名字:
#define 命令雖然能解決問(wèn)題,但也帶來(lái)了不小的副作用,導(dǎo)致宏名過(guò)多,代碼松散,看起來(lái)總有點(diǎn)不舒服。C語(yǔ)言提供了一種 枚舉(Enum)類型 ,能夠列出所有可能的取值,并給它們?nèi)∫粋€(gè)名字。
enum 是一個(gè)新的關(guān)鍵字,專門(mén)用來(lái)定義枚舉類型,這也是它在C語(yǔ)言中的唯一用途; typeName 是枚舉類型的名字; valueName1, valueName2, valueName3, ...... 是每個(gè)值對(duì)應(yīng)的名字的列表。注意最后的 ; 不能少。
例如,列出一個(gè)星期有幾天:
可以看到,我們僅僅給出了名字,卻沒(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。
我們也可以給每個(gè)名字都指定一個(gè)值:
更為簡(jiǎn)單的方法是只給第一個(gè)名字指定值:
這樣枚舉值就從 1 開(kāi)始遞增,跟上面的寫(xiě)法是等效的。
枚舉是一種類型,通過(guò)它可以定義枚舉變量:
也可以在定義枚舉類型的同時(shí)定義變量:
有了枚舉變量,就可以把列表中的值賦給它:
或者:
Mon、Tues、Wed 這些名字都被替換成了對(duì)應(yīng)的數(shù)字。這意味著,Mon、Tues、Wed 等都不是變量,它們不占用數(shù)據(jù)區(qū)(常量區(qū)、全局?jǐn)?shù)據(jù)區(qū)、棧區(qū)和堆區(qū))的內(nèi)存,而是直接被編譯到命令里面,放到代碼區(qū),所以不能用 取得它們的地址。這就是枚舉的本質(zhì)。
枚舉類型變量需要存放的是一個(gè)整數(shù),它的長(zhǎng)度和 int 相同。
一、對(duì)枚舉型的變量賦值。
實(shí)例將枚舉類型的賦值與基本數(shù)據(jù)類型的賦值進(jìn)行了對(duì)比:
方法1:先聲明變量,再對(duì)變量賦值
#includestdio.h
/*?定義枚舉類型?*/
enum?DAY?{?MON=1,?TUE,?WED,?THU,?FRI,?SAT,?SUN?};
void?main()
{
/*?使用基本數(shù)據(jù)類型聲明變量,然后對(duì)變量賦值?*/
int?x,?y,?z;
x?=?10;
y?=?20;
z?=?30;
/*?使用枚舉類型聲明變量,再對(duì)枚舉型變量賦值?*/
enum?DAY?yesterday,?today,?tomorrow;
yesterday?=?MON;
today?????=?TUE;
tomorrow??=?WED;
printf("%d?%d?%d?\n",?yesterday,?today,?tomorrow);
}
方法2:聲明變量的同時(shí)賦初值
#include?stdio.h
/*?定義枚舉類型?*/
enum?DAY?{?MON=1,?TUE,?WED,?THU,?FRI,?SAT,?SUN?};
void?main()
{
/*?使用基本數(shù)據(jù)類型聲明變量同時(shí)對(duì)變量賦初值?*/
int?x=10,?y=20,?z=30;
/*?使用枚舉類型聲明變量同時(shí)對(duì)枚舉型變量賦初值?*/
enum?DAY?yesterday?=?MON,?
today?=?TUE,
tomorrow?=?WED;
printf("%d?%d?%d?\n",?yesterday,?today,?tomorrow);
}
方法3:定義類型的同時(shí)聲明變量,然后對(duì)變量賦值。
#include?stdio.h
/*?定義枚舉類型,同時(shí)聲明該類型的三個(gè)變量,它們都為全局變量?*/
enum?DAY?{?MON=1,?TUE,?WED,?THU,?FRI,?SAT,?SUN?}?yesterday,?today,?tomorrow;
/*?定義三個(gè)具有基本數(shù)據(jù)類型的變量,它們都為全局變量?*/
int?x,?y,?z;
void?main()
{
/*?對(duì)基本數(shù)據(jù)類型的變量賦值?*/
x?=?10;??y?=?20;??z?=?30;
/*?對(duì)枚舉型的變量賦值?*/
yesterday?=?MON;
today?????=?TUE;
tomorrow??=?WED;
printf("%d?%d?%d?\n",?x,?y,?z);?//輸出:10?20?30
printf("%d?%d?%d?\n",?yesterday,?today,?tomorrow);?//輸出:1?2?3
}
方法4:類型定義,變量聲明,賦初值同時(shí)進(jìn)行。
#include?stdio.h
/*?定義枚舉類型,同時(shí)聲明該類型的三個(gè)變量,并賦初值。它們都為全局變量?*/
enum?DAY
{
MON=1,?
TUE,
WED,
THU,
FRI,
SAT,
SUN?
}
yesterday?=?MON,?today?=?TUE,?tomorrow?=?WED;
/*?定義三個(gè)具有基本數(shù)據(jù)類型的變量,并賦初值。它們都為全局變量?*/
int?x?=?10,?y?=?20,?z?=?30;
void?main()
{
printf("%d?%d?%d?\n",?x,?y,?z);?//輸出:10?20?30
printf("%d?%d?%d?\n",?yesterday,?today,?tomorrow);?//輸出:1?2?3
}
2、對(duì)枚舉型的變量賦整數(shù)值時(shí),需要進(jìn)行類型轉(zhuǎn)換。
#include?stdio.h
enum?DAY?{?MON=1,?TUE,?WED,?THU,?FRI,?SAT,?SUN?};
void?main()
{
enum?DAY?yesterday,?today,?tomorrow;
yesterday?=?TUE;
today?=?(enum?DAY)?(yesterday?+?1);?//類型轉(zhuǎn)換
tomorrow?=?(enum?DAY)?30;?//類型轉(zhuǎn)換
//tomorrow?=?3;?//錯(cuò)誤
printf("%d?%d?%d?\n",?yesterday,?today,?tomorrow);?//輸出:2?3?30
}
3、使用枚舉型變量
#includestdio.h
enum
{?
BELL??????????=?'\a',
BACKSPACE?=?'\b',
HTAB?????????=?'\t',
RETURN??????=?'\r',
NEWLINE????=?'\n',?
VTAB?????????=?'\v',
SPACE???????=?'?'
};
enum?BOOLEAN?{?FALSE?=?0,?TRUE?}?match_flag;
void?main()
{
int?index?=?0;
int?count_of_letter?=?0;
int?count_of_space?=?0;
char?str[]?=?"I'm?Ely?efod";
match_flag?=?FALSE;
for(;?str[index]?!=?'\0';?index++)
if(?SPACE?!=?str[index]?)
count_of_letter++;
else
{
match_flag?=?(enum?BOOLEAN)?1;
count_of_space++;
}
printf("%s?%d?times?%c",?match_flag???"match"?:?"not?match",?count_of_space,?NEWLINE);
printf("count?of?letters:?%d?%c%c",?count_of_letter,?NEWLINE,?RETURN);
}
如果一個(gè)變量只有幾種可能的值,就可以定義為枚舉類型。枚舉 就是將變量的值一一列舉出來(lái),變量的值只限于列舉出來(lái)值的范圍。聲名枚舉類型用enum開(kāi)頭。如enum number{1,2,3};就讓number的值只能是1、2或3,其他是錯(cuò)誤的。望采納。
當(dāng)前文章:c語(yǔ)言函數(shù)中枚舉的索引,c語(yǔ)言枚舉法例題
標(biāo)題鏈接:http://chinadenli.net/article41/dsesced.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、外貿(mào)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、用戶體驗(yàn)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)