除了可以直接使用C提供的标准类型名(如int、char、float、double和long等)和程序编写者自己声明的结构体、共用体、枚举类型外,还可以用typedef指定新的类型名来代替已有的类型名。
1、简单地用一个新的类型名代替原有的类型名
typedef int Count;
Count i,j;
使用Count定义变量i和j,可以使人更加一目了然地知道它们是用于计数的。
2、命名一个简单的类型名来代替复杂的类型表示方法
有些类型形式复杂,难以理解,容易写错。
2.1、C 允许程序设计者用一个简单的名字代替复杂的类型形式,例如:
- 命名一个新的类型名来代表结构体类型
- 命名一个新的类型名来代表数组类型
typedef int Num[100];
Num a;//定义a为整型数组名,它有100个元素 - 命名一个新的类型名代表指针类型
typedef char *String;
String p,s[10];//p为字符指针变量,s为字符指针数组 - 命名一个新的类型名代表指向函数的指针类型
typedef int (*Pointer) ( );//声明Pointer为指向函数的指针类型,该函数返回值为整型
Pointer p;//p为Pointer类型的指针变量
2.2、声明一个新类型的方法是
- 先按定义变量的方法写出定义体;
- 将变量名换成新类型名;
- 在最前面加typedef;
- 然后可以用新类型名去定义变量;
注意:
习惯上常把用typedef 声明的类型名的第一个字母用大写表示。
- 以上方法实际上是为特定的类型指定了一个同义词
typedef int Num[100];
Num a;//Num是int[100]的同义词,代表有100个元素的整型数组) - 用typedef 只是对已存在的类型指定一个新的类型名,而没有创造新的类型;
- 用typedef声明数组类型、指针类型、结构体类型、共用体类型、枚举类型等,使得编程序更加方便。
- typedef 与#define表面上有相似之处,
typedef int Count;
#define Count int;
从表面看它们的作用都是用Count 代替int.但事实上,它们二者是不同的。#define 是在预编译时处理的,它只能作简单的字符串替换,而typedef是编译阶段处理的。实际上它并不是作简单的字符串替换。 - 当不同的源文件中用到同一类型数据(尤其是像数组、指针、结构体、共用体等类型数据时),常用typedef声明一些数据类型。可以把所有的typedef名称声明单独放在一个头文件中,然后在需要用到它们的文件中用#include 指令把它们包含到文件中。这样编程者就不需要在各文件中自己定义typedef名称了。
- 使用typedef名称有利于程序的通用和移植。有时程序会依赖于硬件特性,用typedef类型就便于移植。