typedef
關鍵字。typedef 現有型別 新型別名 ;
existing_type
是任何型別,無論是基本型別還是複合型別,new_type_name
是賦予該型別的新名稱的識別符號。
|
|
C
、WORD
、pChar
和 field
,它們分別是 char
、unsigned int
、char*
和 char[50]
的別名。一旦定義了這些別名,它們就可以在任何宣告中使用,就像任何其他有效型別一樣。
|
|
|
|
|
|
typedef
定義的別名和用 using
定義的別名在語義上是等價的。唯一的區別是 typedef
在模板領域有某些限制,而 using
沒有。因此,using
更通用,儘管 typedef
歷史更長,並且在現有程式碼中可能更常見。typedef
和 using
都不會建立新的、獨立的資料型別。它們只為現有型別建立同義詞。這意味著上面用 WORD
型別宣告的 myword
,其型別也可以被認為是 unsigned int
;這並不重要,因為兩者實際上都指向同一個型別。int
的別名來指代特定型別的引數,而不是直接使用 int
,可以在將來的版本中輕鬆地將該型別替換為 long
(或其他型別),而無需更改每個使用它的地方。union type_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names; |
type_name
標識的聯合型別,其中所有成員元素都佔用記憶體中相同的物理空間。此型別的大小是其最大成員元素的大小。例如:
|
|
mytypes
),它有三個成員:
|
|
|
|
int
型別的大小為 4 位元組,short
型別的大小為 2 位元組,那麼上面定義的聯合允許訪問同一組 4 位元組:mix.l
、mix.s
和 mix.c
,我們可以根據我們想要如何訪問這些位元組來使用它們:就像它們是 int
型別的單個值,或者像它們是兩個 short
型別的值,或者分別是一個 char
元素的陣列。該示例在聯合中混合了型別、陣列和結構體,以演示訪問資料的不同方式。對於小端系統,這個聯合可以表示為:帶有常規聯合的結構體 | 帶有匿名聯合的結構體 |
---|---|
|
|
price
),而在第二種型別中則沒有。這影響了訪問此型別物件的成員 dollars
和 yen
的方式。對於第一種型別的物件(帶有常規聯合),訪問方式為:
|
|
|
|
dollars
和 yen
實際上共享相同的記憶體位置,因此它們不能用於同時儲存兩個不同的值。price
可以用 dollars
或 yen
設定,但不能同時使用兩者。enum type_name { value1, value2, value3, . . } object_names; |
type_name
的型別,它可以取 value1
、value2
、value3
等中的任何一個作為值。該型別的物件(變數)可以直接例項化為 object_names
。colors_t
的新變數型別來儲存顏色,其宣告如下:
|
|
color_t
的變數可能取的值是在大括號內列出的列舉成員。例如,一旦聲明瞭 colors_t
列舉型別,以下表達式將是有效的:
|
|
enum
宣告的列舉型別的值可以隱式轉換為整數型別。事實上,這樣的 enum
的元素在內部總是被賦予一個等效的整數數值,並且它們可以被隱式轉換為該數值。如果沒有另外指定,第一個可能值對應的整數值為 0
,第二個為 1
,第三個為 2
,依此類推……因此,在上面定義的 colors_t
資料型別中,black
等效於 0
,blue
等效於 1
,green
等效於 2
,依此類推……
|
|
months_t
的變數 y2k
可以包含從 january
到 december
的 12 個可能值中的任何一個,這些值等效於 1
到 12
之間的整數值(而不是 0
到 11
,因為 january
已被設為等於 1
)。enum
型別,它們既不能隱式轉換為 int
,其列舉成員值也不是 int
型別,而是 enum
型別本身,從而保持了型別安全。它們使用 enum class
(或 enum struct
)而不是簡單的 enum
來宣告。
|
|
enum class
型別的每個列舉成員值都需要限定在其型別作用域內(這實際上也適用於 enum
型別,但只是可選的)。例如:
|
|
enum class
宣告的列舉型別對其底層型別也有更多的控制;它可以是任何整型資料型別,如 char
、short
或 unsigned int
,這主要用於確定該型別的大小。這透過在列舉型別名稱後加冒號和底層型別來指定。例如:
|
|
Eyecolor
是一個獨立的型別,其大小與 char
相同(1 位元組)。![]() 資料結構 | ![]() 目錄 | ![]() 類 (I) |