課程微網(wǎng)站開發(fā)技術(shù)昆明seo優(yōu)化
目錄
枚舉概述
枚舉的使用
枚舉的大小計算
枚舉的優(yōu)點
C語言中的自定義類型有:結(jié)構(gòu)? ?位段? ?枚舉? ?聯(lián)合
枚舉概述
枚舉顧名思義就是一一列舉,把可能的取值一一列舉。
比如我們現(xiàn)實生活中:一周的星期一到星期日是有限的7天,可以一一列舉。性別有:男、女、保密,也可以一一列舉。月份有12個月,也可以一一列舉
枚舉定義:
enum Day//星期
{//枚舉的可能取值//枚舉的可能取值都是常量,不可修改Mon, //注意是逗號Tues,Wed,Thur,Fri,Sat,Sun //結(jié)尾并沒有;
};
enum Sex//性別
{MALE,FEMALE,SECRET
};
enum Color//顏色
{RED,GREEN,BLUE
};
以上定義的 enum Day , enum Sex , enum Color 都是 枚舉類型 。{} 中的內(nèi)容是枚舉類型的可能取值,也叫 枚舉常量 (常量不可修改但是可以賦初值) ?。這些可能取值都是有值的,默認(rèn)從 0 開始,一次遞增 1。當(dāng)然在定義的時候也可以賦初值。
enum Color//顏色
{RED = 1,GREEN = 2,BLUE = 4
};// 某個值復(fù)制后,后面的值如果沒有賦值默認(rèn)增加1。
enum Color//顏色
{RED = 1,GREEN,//2BLUE //3
};
枚舉的使用
定義一個枚舉類型的變量:
#include<stdio.h>
enum Color//顏色
{RED,GREEN,BLUE
};
int main()
{enum Color col = RED;printf("%d", col); //打印RED的值為0return 0;
}
既然RED的值為0,那我們能否將0賦值給col呢?enum Color col = 0;//這樣是否可行呢?
運行之后,我的編譯器編譯成功而且順利運行。
但是并不代表這個語法在所有編譯器下都是正確的。這取決與編譯器對語法的容忍程度。
所以,只能拿枚舉常量給枚舉變量賦值,才不會出現(xiàn)類型的差異。
枚舉的大小計算
之前計算結(jié)構(gòu)體的大小時,結(jié)構(gòu)體的成員都有明確的類型,結(jié)合內(nèi)存對齊的知識就可以得到結(jié)構(gòu)體的大小。而我們發(fā)現(xiàn)枚舉里的成員都是常量沒有類型,甚至貌似都沒有一條完整的語句,那該如何計算呢?
printf("%d", sizeof(enum Color));
運行之后,其結(jié)果是4。
解釋:回顧之前介紹枚舉類型,枚舉{}里面所列的是枚舉的可能取值。
例如定義該枚舉類型的變量:
enum Color col = BLUE;
col只能是{}中枚舉的可能取值中的任意一個。
而之所以結(jié)果是4,是因為在我所使用的編譯器下常量大小為4字節(jié)。
枚舉的優(yōu)點
1. 增加代碼的可讀性和可維護(hù)性
2. 和 #define 定義的標(biāo)識符相比較,枚舉有類型檢查,更加嚴(yán)謹(jǐn)。
3. 防止了命名污染(封裝)
4. 便于調(diào)試
5. 使用方便,一次可以定義多個常量
此外,今后我們利用枚舉來設(shè)置程序的菜單會顯得更加美觀。