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