链表创建中,typedef的问题

来源:百度知道 编辑:UC知道 时间:2024/07/03 03:07:09
.....

struct llist
{
int num;
char name[10];
sturct llist *next;
};
typedef struct llist node; /*定义新类型*/
typedef node *llink; /*定义新类型指针*/

void main()
{....}

typedef 那里有点没看明白,用了两个typedef,为什么不直接typedef struct llist *llink;?能不能再解释下这两句的用处?
既然都是由typedef重命名,node和*llink有什么不一样吗?用到的时候随便用哪个不都一样么?为什么要重命名两个?

因为node 它可能也要用到,所以就那样定义

你说node和 struct list确实是一样,但node的名

字更加形象,这样程序员就更容易知道他是怎么个

结构类型,如结点类型,不知道我这样解释你能明

白吗?的确没有错,typedef就是定义一种类型的别
名而不是创造一种新类型,为了使程序更加容易理解。。

node 代表struct llist 类型

llink 代表 struct llist 指针类型

其实我们可以这样写:

typedef struct llist
{
int num;
char name[10];
sturct llist *next;
}node,*llink;

比如定义 node p; llink q; q=&p;

q->num=110;

这种方法在windows编程下定义的结构体全部是这样定义的

例如:

typedef struct tagPOINT {
LONG x;
LONG y;
} POINT, *PPOINT;

这个为定义一个点的结构体类型

有点函数是返回一结构体类型指针,我们就可以简化它

定义这个:node p; 系统分配node大小的内存空间

定义这个llink q;类型分配4个字节大小空间

所以这样是错误的

llink q q->num=100;<造成空指针使用>