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) |