[點(diǎn)評(píng):枚舉一般用于定義一個(gè)集合,如色彩,星期等等,他提供了更加貼近實(shí)際的對(duì)對(duì)象的描述,方便了編程工作.] 下面簡單介紹下C語言中的枚舉類型和在Linux系統(tǒng)中的作用,。 枚舉是一個(gè)被命名的整型常數(shù)的集合, 枚舉在日常生活中很常見,。 例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,SATURDAY, 就是一個(gè)枚舉,。 枚舉的說明與結(jié)構(gòu)和聯(lián)合相似, 其形式為: enum 枚舉名{ 標(biāo)識(shí)符[=整型常數(shù)], 標(biāo)識(shí)符[=整型常數(shù)], ... 標(biāo)識(shí)符[=整型常數(shù)], } 枚舉變量; 如果枚舉沒有初始化, 即省掉"=整型常數(shù)"時(shí), 則從第一個(gè)標(biāo)識(shí)符開始, 順 次賦給標(biāo)識(shí)符0, 1, 2, ...。但當(dāng)枚舉中的某個(gè)成員賦值后, 其后的成員按依次 加1的規(guī)則確定其值,。 例如下列枚舉說明后, x1, x2, x3, x4的值分別為0, 1, 2, 3,。 enum string{x1, x2, x3, x4}x; 當(dāng)定義改變成: enum string { x1, x2=0, x3=50, x4, }x; 則x1=0, x2=0, x3=50, x4=51 注意: 1. 枚舉中每個(gè)成員(標(biāo)識(shí)符)結(jié)束符是",", 不是";", 最后一個(gè)成員可省略 ","。 2. 初始化時(shí)可以賦負(fù)數(shù), 以后的標(biāo)識(shí)符仍依次加1,。 3. 枚舉變量只能取枚舉說明結(jié)構(gòu)中的某個(gè)標(biāo)識(shí)符常量,。 例如: enum string { x1=5, x2, x3, x4, }; enum strig x=x3; 此時(shí), 枚舉變量x實(shí)際上是7,。 enum 關(guān)鍵字在c中用的是比較多的,它常用來定義標(biāo)記整型常量,,你去看許多操作系統(tǒng)的源代碼,,都有用這個(gè)關(guān)鍵字來一次定義許多標(biāo)記整型常量,其實(shí)它相當(dāng)于定義一 個(gè)整型常量的表,,方便應(yīng)用時(shí)查找,。當(dāng)然他的大部分功能都可以被宏定義代替,不過畢竟enum關(guān)鍵字定義的東東是支持類型檢查的,,可以用編譯器來發(fā)現(xiàn)一些錯(cuò) 誤(enum定義的只能是整型的常量表)
補(bǔ)充:在實(shí)際問題中,,有些變量的取值被限定在一個(gè)有限的范圍內(nèi),。例如,,一個(gè)星期內(nèi)只有七天,一年只有十二個(gè)月,,一個(gè)班每周 有六門課程等等,。如果把這些量說明為整型,字符型或其它類型顯然是不妥當(dāng)?shù)?。為此,,C語言提供了一種稱為“枚舉”的類型。在“枚舉”類型的定義中列舉出所 有可能的取值,,被說明為該“枚舉”類型的變量取值不能超過定義的范圍,。應(yīng)該說明的是,枚舉類型是一種基本數(shù)據(jù)類型,,而不是一種構(gòu)造類型,,因?yàn)樗荒茉俜纸? 為任何基本類型。 11.1.1枚舉類型的定義和枚舉變量的說明1,、枚舉的定義枚舉類型定義的一般形式為:enum 枚舉名{ 枚舉值表 }; 在枚舉值表中應(yīng)羅列出所有可用值,。這些值也稱為枚舉元素。例如: 該枚舉名為weekday,,枚舉值共有7個(gè),,即一周中的七天。凡被說明為weekday類型變量的取值只能是七天中的某一天,。 2,、枚舉變量的說明 如同結(jié)構(gòu)和聯(lián)合一樣,枚舉變量也可用不同的方式說明,,即先定義后說明,,同時(shí)定義說明或直接說明。設(shè)有變量a,b,c被說明為上述的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; 11.1.2枚舉類型變量的賦值和使用枚舉類型在使用中有以下規(guī)定:1,、枚舉值是常量,,不是變量。不能在程序中用賦值語句再對(duì)它賦值,。例如對(duì)枚舉weekday的元素再作以下賦值: sun=5; mon=2; sun=mon; 都是錯(cuò)誤的,。 2、枚舉元素本身由系統(tǒng)定義了一個(gè)表示序號(hào)的數(shù)值,,從0開始順序定義為0,,1,2…,。如在weekday中,,sun值為0,mon值為1,,…,sat值為6,。 【例11.10】 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); } 說明:只能把枚舉值賦予枚舉變量,不能把元素的數(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)該說明的是枚舉元素不是字符常量也不是字符串常量,,使用時(shí)不要加單,、雙引號(hào)。 【例11.11】 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 (j>d) 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"); } 原文鏈接: http://linux./c/76... |
|