C基础——typedef简介
typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。在这一方面,与预处理指令#define相似,但也有不同之处:
第1点,typedef定义的名称==只作用于数据类型==,不能用于值。
第2点,typedef由编译器解释,而不是预处理器。
第3点,在受限范围内,typedef比#define更加灵活
```C
typedef char* STRING;
STRING str1, str2;
```
以上代码中,STRING的作用域取决于定义位置,如果在函数内,则是块作用域,如果在函数外,则有文件作用域。
值得一提的是,第2个声明将str1和str2都声明为char *类型,即char *str1, *str2;
```C
#define char* STRING;
STRING str1, str2;
```
如果类似以上代码,将typedef换成#define,则预处理器会将第2条声明解释为:char *str1, str2;即,只有str1是char *类型,而str2是char类型。
typedef还可以用于struct
```C
typedef struct book
{
char title[21];
char author[21];
float price;
}BOOK;
struct book library1;
BOOK library2;
```
以上代码中,BOOK就是typedef为struct book定义的别名,效果与之相同。此外,使用typedef时可以省略结构标记:
```C
typedef struct
{
char name[21];
int age;
char job[21];
}PERSON;
PERSON p1 = {"Mike", 15, "student"};
```
最后一条声明将被翻译成:
```C
struct{char name[21], int age; char job[21]} p1 = {"Mike", 15, "student"};
```
使用typedef的另一个原因是:为复杂的类型命名
```C
typedef char (* FUN()) [5];
```
将FUN声明为一个函数类型,该函数返回一个指针,该指针指向内含5个char类型元素的数组。
==typedef并没有创建新类型,只是为现有类型创建了一个更易于识别和使用的别名==