谁能解释一下c中单个链表的以下声明之间的区别是什么?更具体地说,为什么第一个不正确?
typedef struct
{
char *data;
struct linkedlist *next;
} linkedlist;
对比
typedef struct linkedlist
{
char *data;
struct linkedlist *next;
} linkedlist;
谁能解释一下c中单个链表的以下声明之间的区别是什么?更具体地说,为什么第一个不正确?
typedef struct
{
char *data;
struct linkedlist *next;
} linkedlist;
对比
typedef struct linkedlist
{
char *data;
struct linkedlist *next;
} linkedlist;
在第一种情况下,编译器达到
struct linkedlist *next;
它不知道 astruct linkedlist
是什么。
在第二种情况下,您在 struct 声明的开头告诉它它是一个struct linkedlist
. 这使编译器在以后遇到该next
字段时感到高兴。
typedef struct
{
...
} linkedlist;
以上允许您能够如下声明变量:
linkedlist thisIsALinkedList;
但问题是这仅由编译器在结构末尾解析。所以当它到达时 struct linkedlist *next
它不知道是什么linkedlist
(即使它知道了,声明仍然是不正确的,因为它应该是 just linkedlist *next
)。