c語言筆記三 數據(2011.12.29)

枚舉類型

枚舉類型就是指它的值爲符號常量而不是字面值的類型

 

先解釋下字面值:

字面值就是那些具體的數或者字符或者字符串。
例如定義一個整型變量 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);

}

結果是:

 

若程序改爲:

 

結果是:

 

發佈了27 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章