1. 基本解释

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

在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

2. typedef & 结构的问题

通过三个由浅入深的例子可以较为简单的说明这个问题:

(1)结构struct的定义

struct tagMyStruct

 int iNum; 
 long lLength; 
};

上面的语句声明的一个简单的结构,结构名:tagMyStruct,包含的参数:iNum、lLength

(2)typedef与结构结合使用
typedef struct tagMyStruct

 int iNum;
 long lLength;
} MyStruct;

上面的语句声明了一个结构体,结构名:tagMyStruct,包含的参数:iNum、lLength,结构的别名:MyStruct

(3)链表结构(结构迭代内部指针)

typedef struct tagNode *pNode;
struct tagNode 
{
 char *pItem;
 pNode pNext;
};

上面语句使得struct tagNode与*pNode等价,即可用pNode声明一个pNext结构指针,指向struct tagNode,实现了结构的迭代调用,多为链表例中所使用的表达形式。

3.补充:

struct在代码中常见两种形式: 
struct A 

//... 
};

struct 

//... 
} A; 
这其实是两个完全不同的用法: 
前者叫做“结构体类型定义”,意思是:定义{}中的结构为一个名称是“A”的结构体。 
这种用法在typedef中一般是: 
typedef struct tagA //故意给一个不同的名字,作为结构体的实名 

//... 
} A; //结构体的别名。

后者是结构体变量定义,意思是:以{}中的结构,定义一个名称为"A"的变量。这里的结构体称为匿名结构体,是无法被直接引用的。 
也可以通过typedef为匿名结构体创建一个别名,从而使得它可以被引用: 
typedef struct 

//... 
} A; //定义匿名结构体的别名为A