枚舉類型
枚舉類型就是指它的值爲符號常量而不是字面值的類型
先解釋下字面值:
字面值就是那些具體的數或者字符或者字符串。
例如定義一個整型變量 int a=20;
這裏a是一個整型的變量,裏面存放一個整數,這裏被初始化爲20。
而這裏的20就是字面值,它不是數據類型。
又例如,string str=“I am Chinese !”
I am Chinese !就是字面值,str是存放這個字面值的字符串變量。
一個由C/C++編譯的程序佔用的內存分爲以下幾個部分
1、棧區(stack)—> 由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧。
2、堆區(heap)—> 一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。
3、全局區(靜態區)(static)—>全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。- 程序結束後由系統釋放
4、文字常量區—>常量字符串就是放在這裏的。程序結束後由系統釋放
5、程序代碼區—>存放函數體的二進制代碼。
所謂的字面值 就是 存在在 4 文字常量區 裏 有一個固定的地址
enum Jar_Type{CUP,PINT,QUART,HALF_GALLON,GALLON};
這條語句聲明瞭一個類型,稱爲 Jar_Type 這種類型的變量按下列方式聲明:
enum Jar_Type milk_jug,gas_can,medicine_bottle;
如果某種特別的枚舉類型的變量只使用一個聲明,你可以把上面兩條語句組合成下面的樣子:
enum Jar_Type{CUP,PINT,QUART,HALF_GALLON,GALLON}milk_jug,gas_can,medicine_bottle;
這種類型的變量實際上以整型的方式存儲,這些符號名的實際值都是整型值。這裏CUP是0,PINT是1,以此類推。適當的時候,你可以爲這些符號名指定特定的整型值。如下所示:
enum Jar_Type{CUP=8,PINT=16,QUART=32,HALF_GALLON=64,GALLON=128};
只對部分符號名用這種方式進行賦值也是合法的。如果某個符號名未顯式指定一個值,那麼它們的值就比前面一個符號名的值大1。
#include<stdio.h>
void main()
{
enum colour {black,white=8,red};
enum colour gas,can;
gas=black;
can=red;
printf("this is %d\n",gas);
printf("this is %d\n",white);
printf("this is %d\n",red);
}
結果是:
若程序改爲:
結果是: