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