一、typedef
typedef的作用是为数据类型重命名,当然只能是数据类型,不能是变量。
注意:使用typedef后,要加分号" ; "。
二、举例
typedef struct student
{
//code
} Stu_st, *Stu_pst;
我们给Stu_st 取了个别名叫:
struct student
{
//code
}
我们给Stu_pst 取了个别名叫:
struct student
{
//code
} *
所以,struct student stu1; 和 Stu_st stu1;没有区别。
struct student * stu2; 和 Stu_pst stu2; 没有区别。
三、typedef与#define的区别
(1)#define INT32 int
unsigned INT32 i = 10;
(2)typedef int int32;
unsigned INT32 j = 10;
其中,(1)编译正常,这个容易理解;(2)编译出错,我也不知道这是为什么,估计编译器将这句话理解为:unsigned ( int ) int j =10; 即INT32代表的 int 和unsigned ( int ) 是两次声明,所以出错。
思考下面的一个例子:
#define dPS struct *s
typedef struct s* tPS;
以上两种情况的意图都是要定义dPS和tPS作为一个指向结构体s的指针。哪种方法更好呢?
答案是:typedef更好。
比如:
dPS p1, p2;
tPS p1, p2;
将第一个扩展为: struct s * p1, p2;
那么,p1为指向结构体s的指针,p2为结构体s类型的变量。
将第二个我们可以这样理解:p1, p2均为tPS类型,即p1,p2均为指向结构体s的指针。
声明:以上内容为我做学习《C语言深读解析》电子版和网络文章《16道嵌入式C语言面试题》时做的学习笔记。