如何在c中声明单链表?

时间:2013-02-22 11:18:18

标签: c singly-linked-list

有谁可以解释c中单个链表的以下声明之间的区别是什么?更具体地说,为什么第一个不正确?

typedef struct
{
    char *data;
    struct linkedlist *next;
} linkedlist;

VS

typedef struct linkedlist
{
    char *data;
    struct linkedlist *next;
} linkedlist;

2 个答案:

答案 0 :(得分:5)

在第一种情况下,编译器到达

struct linkedlist *next;

并且它不知道struct linkedlist是什么。

在第二种情况下,您在结构声明的开头告诉它它是struct linkedlist。这使得编译器在以后遇到next字段时会感到高兴。

答案 1 :(得分:1)

typedef struct
{
  ...
} linkedlist;

以上允许您能够按如下方式声明变量:

linkedlist thisIsALinkedList;

但问题是这只是由结构体末尾的编译器解析的。所以当它达到struct linkedlist *next时,它不知道linkedlist是什么(即使它确实如此,声明仍然是不正确的,因为它应该只是linkedlist *next