typedef
工具是一个高级数据特性,利用typedef
可以为某一类型自定义名称
。这方面与#define
类似,但是两者有3处不同:
序号 | 描述 |
---|---|
1 | 与#define 不同,typedef 创建的符号名只限类型 ,不能用于值 |
2 | typedef 由编译器 解释,#define 语句是由预编译器 进行处理的 |
3 | 在其受限范围内,typedef 比#define 更灵活 |
使用typedef
时要记住,typedef
并没有创建任何新类型,它只是为已存在的类型
增加了一个方便使用的标识符
。
1、用于 等价标记
typedef char * STRING;
没有typedef
关键字,编译器将把STRING识别为一个指向char
的指针
。
有了typedef
关键字,编译器则把STRING解释成一个类型的标识符
,该类型是指向char
的指针
。
因此:
STRING name , sign;
相当于:
char * name , * sign;
2、用于 结构体
我们可以使用typedef
简化结构体变量
的定义,这里可以省略结构名
【book】:
typedef struct {
char title[40];
char author[40];
float price;
} BookCartoon;
BookCartoon harryPotter; //定义结构体变量 harryPotter
3、给复杂的类型命名
typedef char (* FRPTC() ) [5];
把FRPTC
声明为一个函数类型
,该函数返回一个指针
,该指针指向
内含5个char类型值的数组
。
typedef int arr5[5];
typedef arr5 * p_arr5;
typedef p_arr5 arrp10[10];
arr5 togs; // togs 是一个内含5个int类型值的数组
p_arr5 p2; // p2 是一个指向数组的指针,该数组内含5个int类型的值
arrp10 ap; // ap 是一个内含10个指针的数组,每个指针都指向一个内含5个int类型值的数组
序号 | 描述 |
---|---|
1 | togs 是一个内含 5个int 类型值的数组 |
2 | p2 是一个指向数组 的指针 ,该数组内含 5个int 类型值 |
3 | ap 是一个内含10个指针 的数组 ,每个指针都指向一个内含 5个int 类型值的数组 |