求解释typedef struct node结构体的作用

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

struct library
{
char num[10];/* 编码 */
char name[20]; /*书名*/
char writer[20]; /*作者*/
char classify[20];/*分类*/

};

typedef struct node
{
struct library data; /*head*/
struct node *next;
}Node,*Link;

首先你要明白typedef的作用。typedef是C语言里的一个关键字,用来给一个类型别名(化名)。比如


typedef int size_t;

typedef struct node Node;


第一个例子给内置类型int一个别名size_t。第二个例子给struct node一个别名Node。这里你看到了typedef的两个常用情况。第一个例子用以给一个通用类型更具化的别名,这往往会增加你的代码的可读性。第二个例子用以简化代码的繁复性,每当你需要声明一个struct node变量的时候,你可以直接用Node。


你的例子


typedef struct node {
  struct library data;
  struct node *next;
} Node, * Link;


只是一个比较紧凑的写法,等价于如下写法:


typedef struct node Node, * Link;
struct node {
  struct library data;
  Link next;  // Node * next;
}


注意我把typedef置于结构体node的定义之前(这是一个C成语)。它的好处是C编译器会先看见别名定义,所以在结构体node的定义里面我就已经可以用其别名Link或者Node来声明变量或指针了。你可以把typedef置于结构体node的定义之后,写作


struct node {
  struct library data;
  struct node * next;
}
typedef struct node Node, * Link;


但这样你就不能在node的定义里面用定义完才给的别名Node或Link了。所以你看到里面next的声明用的是struct node *。


最后,


typedef struct node Node, * Link;


仍然是一个紧凑的写法,等价于:


typedef struct node Node;
typedef struct node * Link;


第一条语句给struct node(结构体node本身)一个别名Node。第二条语句给struct node *(指向node结构体的指针)一个别名Link。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-17
typedef struct node //定义一个结构,名为node
{
struct library data; /*head*/ //成员之一data为 library结构类型
struct node *next; //成员之一next为指向 library结构类型的指针
}Node,*Link; //node的别名叫Node,指针别名叫Link
这样定义完之后,就可以这么用了:
Node anode;
Link pnode;追问

那“Node *p;”这个是解释为指针p指向library的结构类型吗?

本回答被网友采纳
第2个回答  2013-12-20
1、一般C语言编译器环境,定义结构体需要:
typedef struct node ,但很多C/C++编译器,可以直接写:
struct node
2、结构体,可以存放不同的数据类型,诸如象数据库中的记录,网络游戏中通讯的数据结构等,采用结构体就很方便
3、更多交流参考我空间文章。
第3个回答  2013-12-18
在C语言中,结构体变量定义的时候是这样的:

struct 结构体名 变量名;

但是如果把struct 结构体名 定义成一个新类型的话,就可以不用写struct
所以
本来要
struct node* p;
的现在可以写成
Node* p
甚至
Link p (连*都不要了,因为typedef struct node* Link;
第4个回答  2013-12-17
没有使用typedef的声明时使用结构体名,使用了的,就要使用后面定义的名字了,
相似回答