typedef关键字
1.typedef的作用
- typedef 最基础的作用在于起别名。例如
typedef int interger;
就是给int起了一个别名。在一些应用场景中,起别名可以让程序看起来更加直观。
typedef也可以一次性起多个别名:typedef int integer,*pinteger;
这句话为int起了两个别名,但是注意其中pinteger是一个指针,一定要注意为指针起别名时要在相应的别名上加上号,而不是在最先面加上*号,因为在最前面加号只会让第一个别名变成指针别名。 - typedef可以简化一些比较复杂的声明:
1.用typedef来简化行指针的声明:typedef int (*pointer_to_array)[3];
。之后就可以使用pointer_to_array
来定义一个指向三个整型变量的行指针了,比如pointer_to_array ptr;
。
2.用typedef来简化函数指针定义,比如typedef int (*pointer_to_function)(int, int);
。
2.typedef和define
我们知道define也可以用来起别名,但是define和typedef的区别在于,define永远都是机械的替代,而typedef是重新封装一个名字。一个经典的例子:
#define p_int int*
typedef int* p_int;
p_int a,b
上面两种替换方式会不一样。当使用define来替换时,式子编程int *a,b
,这里只有a是int型指针,而b只是一个普通的int型变量。但如果使用typedef来替换,那么a,b都会是int型指针。而且要注意define和typedef起名字时的顺序不一样,而且因为typedef是一个语句,末尾要加上分号。
3.typedef和结构体
因为在使用结构体的时候经常会用到类似于struct Book
这样的表达,这种代码一多看起来会很混乱,所以我们通常可以为结构体起一个别名,而且国际通用惯例是,给结构体起别名时直接起两个,加上一个指针别名。例子:
typedef struct Book
{
char name[120];
float price;
}BOOK, *PBOOK;
这样一来定义Book
类结构体就可以直接使用BOOK
关键字了,这种定义法使得BOOK
也更像和int
、char
等标准类型的数据结构了。另外定义Book类指针就可以直接使用PBOOK
关键字了,很方便。