typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义数据类型。

与#define的区别

 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:

#define P int*
p pa, pb; // 这多数不符合我们的意图,它只声明了一个指向整型变量的指针和一个整型变量;

以下则可行:

typedef int* P;  
P pa, pb;   
简化struct声明

以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名对象名,如:

struct tagPOINT1  
 {  
    int x;  
    int y;   
};  
struct tagPOINT1 p1;  

而在C++中,则可以直接写:结构名对象名,即:tagPOINT1 p1;

为了简化C中的struct声明:

typedef struct tagPOINT  
{  
    int x;  
    int y;  
}POINT;  

PoINT p1;//这样就比原来的方式少写了一个struct
typedef 和存储类关键字(storage class specifier)  

这种说法是不是有点令人惊讶,typedef 就像 auto,extern,mutable,static,和 register 一样,是一个存储类关键字。这并不是说 typedef 会真正影响对象的存储特性;它只是说在语句构成上,typedef 声明看起来象 static,extern 等类型的变量声明。

typedef register int FAST_COUNTER; // 错误  

编译通不过。问题出在你不能在声明中有多个存储类关键字。因为符号 typedef 已经占据了存储类关键字的位置,在 typedef 声明中不能用 register(或任何其它存储类关键字)。