C C enum 列舉量宣告 定義和使用

2021-06-29 08:46:08 字數 3064 閱讀 8937

1

首先,請看下面的語句:

enum enumtype ;

這句話有兩個作用:

第一:宣告enumtype為新的資料型別,稱為列舉(enumeration);

第二:宣告monday、tuesday等為符號常量,通常稱之為列舉量,其值預設分別為0-6。(後面會介紹怎樣顯式的初始化列舉量的值) 2

接著利用新的列舉型別enumtype宣告這種型別的變數:

enumtype weekday;

就像使用基本變數型別int宣告變數一樣,如 int a;

然而與基本變數型別不同的地方是,在不進行強制轉換的前提下,只能將定義的列舉量賦值給該種列舉的變數,如:

weekday = monday;

或者weekday = sunday;

不能將其他值賦給列舉變數,如:

weekday = 10;

這是不允許的,因為10不是列舉量

也就是說weekday只能是定義的monday-sunday這些定義過的列舉量

然而這不是絕對的,第六條會講到利用強制型別轉換將其他型別值賦給列舉變數。 3

上面講不能將非列舉量賦給列舉變數,那麼能不能將列舉量賦給非列舉變數呢?如:

int a=monday;

這是允許的,因為列舉量是符號常量,這裡的賦值編譯器會自動把列舉量轉換為int型別。 4

前面講可以對列舉進行賦值運算,那列舉變數能不能進行算術運算呢?

weekday++;

weekday = monday + tuesday;

這是非法的,因為這些操作可能導致違反型別限制,比如:

weekday = sunday;

weekday++;

weekday首先被賦予列舉量中的最後乙個值sunday(值為6),再進行遞增的話,weekday增加到7,而對於enumtype型別來說,7是無效的。

總結:對於列舉,只定義了賦值運算子,沒有為列舉定義算術運算。

5

不能對列舉量進行算術運算,那麼列舉量能不能參與其他型別變數的運算呢?

int a;

a = 1 + monday;

這是允許的,因為編譯器會自動把列舉量轉換為int型別。 6

第二條講:在不進行強制轉換的前提下,只能將定義的列舉量賦值給該種列舉的變數,言下之意就是可以通過強制轉換將其他型別值賦給列舉變數

weekday = enumtype(2);

等同於:

weekday = wednesday;

但是,如果試圖將乙個超出列舉取值範圍的值通過強制轉換賦給列舉變數,會出現什麼結果?

weekday = enumtype(20);

結果將是不確定的,這麼做不會出錯,但得不到想要的結果。

end

1

前面講通過定義

enum enumtype ;

列舉量monday、tuesday等的值預設分別為0-6,我們可以顯式的設定列舉量的值:

enum enumtype ;

指定的值必須是整數! 2

也可以只顯式的定義一部分列舉量的值:

enum enumtype ;

這樣monday、wednesday均被定義為1,則tuesday=2,thursday、friday、saturday、sunday的值預設分別為2、3、4、5.

總結:未被初始化的列舉值的值預設將比其前面的列舉值大1。

3

第二條還說明另外乙個現象,就是列舉量的值可以相同。

end

1

前面講到可以通過強制轉換將其他型別值賦給列舉變數:

weekday = enumtype(2);

這是合法的;但是

weekday = enumtype(20);是非法的。

這裡涉及列舉取值範圍的概念:

列舉的上限是 大於最大列舉量的 最小的2的冪,減去1;

列舉的下限有兩種情況:一、列舉量的最小值不小於0,則列舉下限取0;二、列舉量的最小值小於0,則列舉下限是 小於最小列舉量的 最大的2的冪,加上1。

舉例來講:

假如定義 enum enumtype1 ;

則列舉的上限是16-1=15(16大於最大列舉量14,且為2的冪);

列舉的下限是-8+1=-7(-8小於最小列舉量-5,且為2的冪);

end

1

個人覺得列舉switch是最好的搭檔:

enum enumtypestep=step0;

//注意這裡在宣告列舉的時候直接定義了列舉變數step,並初始化為step0

switch (step)

case step1:

case step2:

default:break;

}

C 變數宣告定義

1.extern 宣告變數,在乙個檔案裡宣告以後,表示該變數要去其它檔案找變數,告訴編譯器 你現在編譯的檔案中,有乙個識別符號雖然沒有在本檔案或本檔案當前位置中定義,但是它是在別的檔案中或本檔案其它位置定義的全域性變數,你要放行!宣告變數 extern type variable 有extern,無...

宣告,定義,變數的含義

在c語言中,宣告 告訴計算機 編譯器 有,定義 讓計算機 編譯器 建立,宣告不建立,定義建立。變數在程式執行過程中,其值是可以改變的量 在c語言中,變數的宣告和定義是一體的,先定義 宣告 然後呼叫,呼叫必須在定義 宣告 之後。變數的定義格式為 修飾符 型別說明符 變數名識別符號,變數名識別符號,變數...

C 函式的宣告定義

include 宣告 extern char mystrstrpoint char dest,char src extern char mystrstrarr char dest,char src extern char mystrcat char dest,char src extern void...