0

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

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

对比

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

2 回答 2

5

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

struct linkedlist *next;

它不知道 astruct linkedlist是什么。

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

于 2013-02-22T11:20:41.400 回答
1
typedef struct
{
  ...
} linkedlist;

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

linkedlist thisIsALinkedList;

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

于 2013-02-22T11:21:52.817 回答