typedef的用法一直理解的深度不够,今天在网查上了一些资料,理解的还算可以,然后做一下总结。
网上的说法一般这样,typedef用法分为4类:1,变量取别名,例如 typedef char* PCHAR;PCHAR p与char* p等价,都是定义p为一个指向char类型的指针;2,是为了书写简洁,以前struct变量声明的时候,前面总是要加struct的,这样书写起来麻烦,typedef tagPOINT{int x;int y;}POINT;POINT p 与 struct tagPOINT p等价,都是定义p为一个TagPOINT类型的结构体;3,用typedef定义平台无关的类型,typedef long double REAL,typedef double REAL,等等。只需使用REAL,不用管平台如何;4,为复杂的声明定义一个简单的声明,例如typedef int (*A) (char, char),A b;b则是一个指针,指针指向函数,函数的返回值类型是int,参数类型是两个char。
体会一下上面四种用途,其实完全可以归为一种形式,(以下是个人的理解)那就是:在利用typedef的时候,就像声明了一个变量一样,如上面的,typedef char* PCHAR;PCHAR就像声明的一个指向char型的指针;typedef tagPOINT{int x;int y;}POINT;POINT就像声明的一个struct tagPOINT类型变量;typedef double REAL;REAL就像声明的一个double类型变量;typedef int (*A) (char, char),A就像声明的是一个指针,指针指向函数,函数的返回值类型是int,参数类型是两个char;这四种情况都是这样,而当使用typedef定义的别名的时候,定义的变量其实和typedef中定义的变量类型(姑且认为别名是定义的变量)是一样的。例如A a;a的含义和上面所讲的A含义是一样的。
可能理论上说不过去,但是可以这样理解,当遇到typedef的时候,就可以理解其中定义的变量的含义了。