/*定义struct node类型结构,并声明LNode为 struct node类型的别名,及指向struct node类型变量的类型 LinkList*/
typedef struct node
{
ElemType data;
struct node *next;
}LNode,*LinkList;
这是一种重合方式的写法,将typedef与定义结构写在一起,分解为:
struct node
{
ElemType data;
struct node *next;
};typedef struct node LNode,*LinkList;使用时,要定义一个 struct node 类型变量,可以使用 LNode,如:
LNode T;
LinkList pT = &T; /*LinkList 定义的变量是一个指针,且必须指向 LNode 类型的变量*/
若将上名黑体部分顺序反过来,即先声明struct node 的别名及指针类型,则 LNode 与 *LinkList 变成隐式声明,即:
typedef struct node LNode,*LinkList;
可以在参加编译的任意一个文件内定义 node 结构,这正是所谓的数据隐藏。
struct node
{
ElemType data;
struct node *next;
};
LNode 及 LinkList 应该称之为类型,与 int、float 等一样,
结构、共同(联合)、枚举使用同一名称空间(并不只有C++才有这一名词),
struct node 结构或其指针可以声明以 node 为名称的 typedef 别名类型,如:
typedef struct node* node; /*这是正确的声明,node 将变成指向 struct node 的指针类型*/
因为使用相同的名称空间,所以这正是为什么说“LNode 及 LinkList 应该称之为类型”的理由。
[此贴子已经被作者于2006-8-19 13:33:21编辑过]