3.8 创建复合类型

基本的数据类型及其变体很重要,但也很简单。C和C++提供的工具允许把基本的数据类型组合成复杂的数据类型。正如我们将看到的那样,这些类型中最重要的是struct,在C++中这是类的基础。但是,创建比较复杂的类型的最简单的一种方式,只需要通过typedef来命名一个名字为另一个名字。

3.8.1 用typedef命名别名

这个关键字从字面上看的作用比它实际所起的作用更大:typedef表示“类型定义”,但用“别名”来描述可能更精确,因为这正是它真正的作用。它的语法是:

typedef原类型名别名

当数据类型稍微有点复杂时,人们经常使用typedef只是为了少敲几个键。下面是一种经常使用的typedef:

3.8 创建复合类型 - 图1

现在如果写ulong,则编译器知道意思是unsigned long。我们可能认为使用预处理程序置换就可以很容易实现,但是在一些重要的场合,编译器必须知道我们正在将名字当做类型处理,所以typedef起了关键作用。

typedef经常会派上用场的地方是指针类型。如前所述,如果写出

3.8 创建复合类型 - 图2

这实际上生成一个intx和一个inty(不是一个int)。也就是说,‘’绑定右边,而不是左边。但是,如果使用一个typedef:

3.8 创建复合类型 - 图3

则x和y都是int*类型。

有人可能争辩说避免使用typedef定义基本类型会更清楚,因此更可读,而使用大量typedef时,程序的确很快变得难以阅读。但是,在C中使用struct时,typedef是特别重要的。