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