Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:
#define dPS struct s *
typedef struct s * tPS;
以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?
这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子:
#include<stdio.h>
#define dPS struct student*
typedef struct student* tPS;
struct student
{
long num;
char name[10];
float score[3];
}stud1,stud2,stud3,stud4;
void main()
{
tPS p1,p2;
dPS p3,p4;
//struct student* p3;
p1 = &stud1;
p2 = &stud2;
p3 = &stud3;
p4 = &stud4;
system("pause");
}
上面的代码定义p3为一个指向结构的指,p4为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p1 和p2 两个指针。