題外話:enum的訪問,直接寫欄位名就可以訪問(需注意作用域)
區別於結構體:結構體變數.欄位名
如果乙個變數你需要幾種可能存在的值,那麼就可以被定義成為列舉型別。之所以叫列舉就是說將變數或者叫物件可能存在的情況也可以說是可能的值一一例舉出來。
舉個例子來說明一吧,為了讓大家更明白一點,比如乙個鉛筆盒中有一支筆,但在沒有開啟之前你並不知道它是什麼筆,可能是鉛筆也可能是鋼筆,這裡有兩種可能,那麼你就可以定義乙個列舉型別來表示它!
enum box;//
這裡你就定義了乙個列舉型別的變數叫box,這個列舉變數內含有兩個元素也稱列舉元素在這裡是pencil和pen,分別表示鉛筆和鋼筆。
這裡要說一下,如果你想定義兩個具有同樣特性列舉型別的變數那麼你可以用如下的兩種方式進行定義!
enum box;
enum box box2;//
或者簡寫成box box2;
再有一種就是在宣告的時候同時定義。
enum box,box2; //
在宣告的同時進行定義!
列舉變數中的列舉元素系統是按照常量來處理的,故叫列舉常量,他們是不能進行普通的算術賦值的,(pencil=1;)這樣的寫發是錯誤的,但是你可以在宣告的時候進行賦值操作!
enum box;
但是這裡要特別注意的一點是,如果你不進行元素賦值操作那麼元素將會被系統自動從0開始自動遞增的進行賦值操作,說到自動賦值,如果你只定義了第乙個那麼系統將對下乙個元素進行前乙個元素的值加1操作,例如
enum box;//
這裡pen就是4系統將自動進行pen=4的定義賦值操作!
前面說了那麼多,下面給出乙個完整的例子大家可以通過以下的**的學習進行更完整的學習!
#include
using
namespace std;
void
main(void)
; enum egg test; //
在這裡你可以簡寫成egg test;
test =
c; //
對列舉變數test進行賦予元素操作,這裡之所以叫賦元素操作不叫賦值操作就是為了讓大家明白列舉變數是不能直接賦予算數值的,例如(test=1;)這樣的操作都是不被編譯器所接受的,正確的方式是先進行強制型別轉換例如(test =
(enum egg) 0;)
! if (test==c)
if (test==2)
cout
<< a << "|" << b << "|" << test <= (enum egg) 0; //
強制型別轉換
cout
<< "列舉變數test值改變為:" << test }看到這裡要最後說乙個問題,就是列舉變數中的列舉元素(或者叫列舉常量)在特殊情況下是會被自動提公升為算術型別的!
#include
using
namespace std;
void
main(void)
; int c=1+b; //
自動提公升為算術型別
cout
<< c }列舉型別
在實際問題中,有些變數的取值被限定在乙個有限的範圍內。例如,乙個星期內只有七天,一年只有十二個月,乙個班每週有六門課程等等。如果把這些量 說明為整型,字元型或其它型別顯然是不妥當的。為此,c語言提供了一種稱為「列舉」的型別。在「列舉」型別的定義中列舉出所有可能的取值,被說明為該「枚 舉」型別的變數取值不能超過定義的範圍。應該說明的是,列舉型別是一種基本資料型別,而不是一種構造型別,因為它不能再分解為任何基本型別。
11.10.1 列舉型別的定義和列舉變數的說明
1. 列舉的定義列舉型別定義的一般形式為:
enum
列舉名;
在列舉值表中應羅列出所有可用值。這些值也稱為列舉元素。
例如:
該列舉名為weekday,列舉值共有7個,即一周中的七天。凡被說明為weekday型別變數的取值只能是七天中的某一天。
2. 列舉變數的說明
如同結構和聯合一樣,列舉變數也可用不同的方式說明,即先定義後說明,同時定義說明或直接說明。
設有變數a,b,c被說明為上述的weekday,可採用下述任一種方式:
enum weekday;
enum weekday a,b,c;
或者為:
enum weekdaya,b,c;
或者為:
enum a,b,c;
11.10.2 列舉型別變數的賦值和使用
列舉型別在使用中有以下規定:
1. 列舉值是常量,不是變數。不能在程式中用賦值語句再對它賦值。
例如對列舉weekday的元素再作以下賦值:
sun=5;
mon=2;
sun=mon;
都是錯誤的。
2. 列舉元素本身由系統定義了乙個表示序號的數值,從0開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1,…,sat值為6。
【例11.10】
main() a,b,c;
a=sun;
b=mon;
c=tue;
printf("%d,%d,%d",a,b,c);
} 說明:
只能把列舉值賦予列舉變數,不能把元素的數值直接賦予列舉變數。如:
a=sum;
b=mon;
是正確的。而:
a=0;
b=1;
是錯誤的。如一定要把數值賦予列舉變數,則必須用強制型別轉換。
如: a=(enum weekday)2;
其意義是將順序號為2的列舉元素賦予列舉變數a,相當於:
a=tue;
還應該說明的是列舉元素不是字元常量也不是字串常量,使用時不要加單、雙引號。
【例11.11】
main() month[31],j;
int i;
j=a;
for(i=1;i<=30;i++)
for(i=1;i<=30;i++)
} printf("/n"); }
ENUM 列舉使用總結
enum format string format public string getformat public void setformat string format enum colorspublic static void main string args 上面是列舉的兩種使用方式,我們以f...
列舉enum學習
enum enumeration name chongqi 3 以上簡單地按區域,將五個城市按照華南 4 華東 2 華北 3 的幾個城市分類了。4 列舉變數的定義 初始化和賦值 至於列舉可以當作特定的整型數來用的例子,從open modes可以體會。7 自定義運算子 列舉是使用者自定義型別,所以在使...
列舉型別(enum)
enum 是計算機程式語言中的一種資料型別 列舉型別。應用場景 有些變數的取值被要求在乙個確定的範圍內,例如一周有 7天,一年 12個月,或者使用者自定義的今天安排要學習的百家姓有 4個等等。定義 在列舉型別的定義中列舉出所有的可能取值,該變數的取值只能是所列舉的範圍。格式 enum 列舉名 enu...