经常我们会遇到以下代码
typedef struct node {
int ;
PNode next;
} PNode,*Linklist;
这样可能看不懂让我们来慢慢简化。
typedef struct node {
int data ;
struct node * next;
} PNode,*LinkList;
再来
struct node {
int data;
struct node *next;
};
typedef struct node PNode;
typedef struct node *Linklist;
到这里想必大家都一目了然了,下面在说说个误区
struct node {
int data;
struct node *next;
} PNode;
对比
typedef struct node {
int data ;
struct node * next;
} PNode;
这两处的PNode分别是什么呢?
下面我这样写你估计就明白了
struct node { int data; struct node *next ;} PNode; // 等同于 struct node PNode;
typedef struct node {int data ;struct node * next;} PNode; // 等同于 typedef struct node PNode;
这里想必大家都明白了
struct node {
int data;
struct node *next;
} PNode;
// 这里面node是一个标记,而PNode是一个结构体变量
typedef struct node {
int data ;
struct node * next;
} PNode;
// 这里面node是一个标记,而PNode等同于 struct node
// 我们定义结构体变量的时候是用 strcut node 变量名;所以可以用 PNode 变量名;
// 当然结构体可以省略标记如:
struct {
int data;
struct node *next;
} PNode;
// 但是我们要给他个结构体变量名,不然就无法申明结构体变量了,这里以后只能用PNode这个结构体变量了,因为我们无法再声明别的结构体变量(缺乏标记)
// 但是我们依然可以用typedef来定义这样我们就解决了不能再次声明结构体变量的烦恼了
typedef struct {
int data ;
struct node * next;
} PNode;
// 这里可以用PNode尽情的声明了。