C++和C语言中enum 如何使用
c++語言中enum類型的用法
枚舉類型,顧名思義,“枚”作為量詞,作“個”講,那么枚舉,就是一個一個的列舉,如果一件事情能夠被一個一個的列舉,那么它的數(shù)量肯定就是有限的,否則是不能被一一列舉出來的。所以枚舉類型即為能被列舉的常量的一個集合。
在生活中,枚舉的例子隨處可見,比如禮拜幾,那么就可以作為一個枚舉變量。這個變量所存儲的值,是有限的,且,能被我們所列舉。再比較說,性別。它也可以作為一個枚舉類型,我們知道,性別也就只有“男”或者“女”,它是可以被我們所列舉的。它能很直觀的表達出我們所定義的事件。
如:定義一個枚舉類型的變量,雖然不知道變量具體是什么值,但能知道它可能會有哪些值,這樣,這樣,就能對程序中所出現(xiàn)的變量的取值有一個很好的估量,從而使程序的編寫更加順利。
枚舉類型的定義寫結(jié)構(gòu)體的定義相似,其形式為:
enum?枚舉名{?
? ?? ?? ?? ?? ?標(biāo)識符[=整型常數(shù)],?
? ?? ?? ?? ?? ?標(biāo)識符[=整型常數(shù)],?
...?
? ?? ?? ?? ?? ?標(biāo)識符[=整型常數(shù)],?
}?枚舉變量;
? ??如果枚舉沒有初始化,?即省掉"=整型常數(shù)"時,?則從第一個標(biāo)識符開始,
依次
次賦給標(biāo)識符0, 1, 2, ...。但當(dāng)枚舉中的某個成員賦值后,?其后的成員按依次?
加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.?枚舉中每個成員(標(biāo)識符)結(jié)束符是",",
不是";",?最后一個成員可省略?
","。?
2.?初始化時可以賦負數(shù),?以后的標(biāo)識符仍依次加1。?
3.?枚舉變量只能取枚舉說明結(jié)構(gòu)中的某個標(biāo)識符常量。?
? ??例如:?
enum string?
{?
x1=5,?
x2,?
x3,?
x4,?
};?
enum strig x=x3;?
此時,?枚舉變量x實際上是7。
4.在外部,我們可以對枚舉變量進行賦值,不過,得要進行類型轉(zhuǎn)換。
? ?? ?? ?如果我們不進行類型輪換,即如下所示進行賦值:
x = 3;
是不允許是,如果對X進行賦值,只能對3進行類型轉(zhuǎn)換.即:
x = (string)3;
那么這樣就對了.
如果給x賦的不是一個整形的數(shù),而是一個字符型的,如:
x = (string)’a’;
那么這時候x的值并不是字符’a’,而是’a’的ASCII碼,我們知道,在枚舉類型中,各常量的值只能是整形的,所以在對上例會自動的將’a’轉(zhuǎn)換成一個整數(shù)值.從內(nèi)存的角度來看來話,其實C/C++中整形和字符型的變量是一樣的,它們之間可以互相轉(zhuǎn)換.
下面是一個使用枚舉類型的例子.(從網(wǎng)上收集得到)
#include <iostream>
#include <iostream>
using namespace?std;
enum?Day?{Saturday,?Sunday?=?0,?Monday,?Tuesday,?Wednesday,
Thursday,?Friday};?//Saturday = 0 by default, Sunday = 0 as well
void?Prnt?(Day day)??// Print whether a day is a 'Weekend' or a "Weekday".
{
? ? ? ? if?(day?==0)?cout?<<?"Weekend"?<<?endl;
? ? ? ? else?cout?<<?"Weekday"?<<?endl;
}
int?main(){
? ? ? ? enum?Fruit?{apple,?pear,?orange,?banana}?frt1;?// 'frt1' can be declarated here.
? ? ? ??
? ? ? ? // int apple; // error: redefinition of 'apple'
? ? ? ??
? ? ? ? typedef enum?Fruit ShuiGuo;?// In c++, 'enum' can be omitted.
? ? ? ??
? ? ? ? enum?Fruit frt2?=?apple;?// In c++, 'enum' can be omitted.
? ? ? ? ShuiGuo frt3?=?pear;?// After type-declaration synonym, 'enum' can not exist here!
? ? ? ??
? ? ? ? frt1?= (Fruit)?0;?// 'frt1' can be assigned with number by explicit cast.
? ? ? ??
? ? ? ? for?(int?i?=?apple;?i?<=?banana;?i++)
? ? ? ? ? ? ? ? switch?(i)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ?? ? case?apple:?cout?<<?"apple"?<<?endl;?break;
? ? ? ? ? ? ? ?? ? case?pear:?cout?<<?"pear"?<<?endl;?break;
? ? ? ? ? ? ? ?? ? case?orange:?cout?<<?"orange"?<<?endl;?break;
? ? ? ? ? ? ? ?? ? case?banana:?cout?<<?"banana"?<<?endl;?break;
? ? ? ? ? ? ? ?? ? default:?break;
? ? ? ? ? ? ? ? }
? ? ? ??
? ? ? ? // Print whether a day is a 'Weekend' or a "Weekday".
? ? ? ? Prnt?(Saturday);
? ? ? ? Prnt?(Sunday);
? ? ? ? Prnt?(Monday);
? ? ? ? Prnt?(Tuesday);
? ? ? ? Prnt?(Wednesday);
? ? ? ? Prnt?(Thursday);
? ? ? ? Prnt?(Friday);
? ? ? ??
? ? ? ??
? ? ? ? return?0;
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
c語言中enum類型的用法
11.10 枚舉類型
在實際問題中,有些變量的取值被限定在一個有限的范圍內(nèi)。例如,一個星期內(nèi)只有七天,一年只有十二個月,一個班每周有六門課程等等。如果把這些量說明為整型,字符型或其它類型顯然是不妥當(dāng)?shù)摹榇?#xff0c;C語言提供了一種稱為“枚舉”的類型。在“枚舉”類型的定義中列舉出所有可能的取值,被說明為該“枚舉”類型的變量取值不能超過定義的范圍。
應(yīng)該說明的是,枚舉類型是一種基本數(shù)據(jù)類型,而不是一種構(gòu)造類型,因為它不能再分解為任何基本類型。
11.10.1 枚舉類型的定義和枚舉變量的說明
1. 枚舉的定義
枚舉類型定義的一般形式為:
enum 枚舉名{ 枚舉值表 };
在枚舉值表中應(yīng)羅列出所有可用值。這些值也稱為枚舉元素。
例如:
該枚舉名為weekday,枚舉值共有7個,即一周中的七天。凡被說明為weekday類型變量的取值只能是七天中的某一天。
2. 枚舉變量的說明
如同結(jié)構(gòu)和聯(lián)合一樣,枚舉變量也可用不同的方式說明,即先定義后說明,同時定義說明或直接說明。
設(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.10.2 枚舉類型變量的賦值和使用
? 枚舉類型在使用中有以下規(guī)定:
1. 枚舉值是常量,不是變量。不能在程序中用賦值語句再對它賦值。 例如對枚舉weekday的元素再作以下賦值: sun=5; mon=2; sun=mon; 都是錯誤的。
2. 枚舉元素本身由系統(tǒng)定義了一個表示序號的數(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;
是錯誤的。如一定要把數(shù)值賦予枚舉變量,則必須用強制類型轉(zhuǎn)換。 如:
a=(enum weekday)2;
其意義是將順序號為2的枚舉元素賦予枚舉變量a,相當(dāng)于:
a=tue; 還應(yīng)該說明的是枚舉元素不是字符常量也不是字符串常量,使用時不要加單、雙引號。
【例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"); }總結(jié)
以上是生活随笔為你收集整理的C++和C语言中enum 如何使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字符设备驱动
- 下一篇: typedef的用法总结