1.struct Student

{

intnum;

charsex;

charname[50];

};

C中,要定义一个Student类型的变量需要使用方式struct Student st;

C++中,要定义一个Student类型的变量只需要Student st;

为方便,可使用typedef。如下:

typedef struct tagSTUDENT

{

int num;

char sex;

char name[50];

}STUDENT;

这样,即使是在C中,要定义一个tagSTUDENT类型的变量也只需要使用STUDENT st;

2.同时声明指针型的多个变量时

char* pa, pb;//实际pachar*类型,即指向字符变量的指针;而pbchar类型,即字符型变量

使用typedef可解决此问题。

typedef char* PCHAR;

PCHAR pa, pb;//声明了两个char* 变量

对结构体也是一样的。

typedef struct tagSTUDENT

{

int num;

char sex;

char name[50];

}* PSTUDENT, STUDENT;//实际PSTUDENTstruct tagSTUDENT*类型,STUDENTstructtagSTUDENT类型

3.typedef来定义与平台无关的类型。

比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:

typedef long double REAL;

在不支持 long double 的平台二上,改为:

typedef double REAL;

在连 double 都不支持的平台三上,改为:

typedef float REAL;

也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。

标准库就广泛使用了这个技巧,比如size_t。另外,因为typedef是定义了一种类型的新别名,不是简单的字符串替换,所以它比宏来得稳健。

4. typedef char* PCHAR1;

#define PCHAR2 char*;

PCHAR1 pa, pb;//pa,pb均为char*类型

PCHAR2 pa, pb;//等价于char* pa, pb。相当于定义了一个char*和一个char


参考

[1] http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html