enum列舉型別
阿新 • • 發佈:2019-01-21
1定義和說明
1. 列舉型別定義的一般形式為: enum 列舉名{列舉值表 }; 在列舉值表中應羅列出所有可用值。這些值也稱為列舉元素。 例如: 該列舉名為weekday,列舉值共有7個,即一週中的七天。凡被說明為weekday型別變數的取值只能是七天中的某一天。 2. 列舉變數的說明 如同結構和聯合一樣,列舉變數也可用不同的方式說明,即先定義後說明,同時定義說明或直接說明。 設有變數a,b,c被說明為上述的weekday,可採用下述任一種方式: enum weekday{ sun,mon,tue,wed,thu,fri,sat }; enum weekday a,b,c; 或者為: enum weekday{ sun,mon,tue,wed,thu,fri,sat }a,b,c; 或者為: enum { sun,mon,tue,wed,thu,fri,sat }a,b,c;2 記憶體空間
enum是列舉型 union是共用體,成員共用一個變數緩衝區
3賦值和使用
列舉型別在使用中有以下規定: 1.列舉值是常量,不是變數。不能在程式中用賦值語句再對它賦值。 2. 列舉元素本身由系統定義了一個表示序號的數值,從0開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1,…,sat值為6。 只能把列舉值賦予列舉變數,不能把元素的數值直接賦予列舉變數。。如一定要把數值賦予列舉變數,則必須用強制型別轉換。 如: a=(enum weekday)2; 特別注意:在VS2010等編譯器中,強制轉換格式應為:(weekday)2,如果前面加上了enum,編譯時會出現“型別重定義”的錯誤。 其意義是將順序號為2的列舉元素賦予列舉3. 如果列舉值與一些關鍵字衝突,例如: enum course{begin, then, end}; 由於程式有可能使用了iostream,並且使用了名稱空間std,這時如果直接使用end進行賦值就有可能出現“不明確”符號的錯誤。解決此問題,有兩個方法: (1)定義列舉值時應避免使用常用關鍵字,可以加字首進行區分 例如:enum course{e_begin, e_then, e_end}; (2)可以列舉值前面加入列舉型別:course::end輸出結果: 1 monday 2 tuesday 3 wendsday 4 thursday 5 friday 6 saturday 7 sunday 8 monday 9 tuesday 10 wendsday 11 thursday 12 friday 13 saturday 14 sunday 15 monday 16 tuesday 17 wendsday 18 thursday 19 friday 20 saturday 21 sunday 22 monday 23 tuesday 24 wendsday 25 thursday 26 friday 27 saturday 28 sunday 29 monday 30 tuesday