cの単一のリンクリストの次の宣言の違いを誰かが説明できますか?より具体的には、なぜ最初のものが正しくないのですか?
typedef struct
{
char *data;
struct linkedlist *next;
} linkedlist;
vs
typedef struct linkedlist
{
char *data;
struct linkedlist *next;
} linkedlist;
cの単一のリンクリストの次の宣言の違いを誰かが説明できますか?より具体的には、なぜ最初のものが正しくないのですか?
typedef struct
{
char *data;
struct linkedlist *next;
} linkedlist;
vs
typedef struct linkedlist
{
char *data;
struct linkedlist *next;
} linkedlist;
最初のケースでは、コンパイラは到達します
struct linkedlist *next;
そして、それは a が何であるかを知りませんstruct linkedlist
。
2 番目のケースでは、構造体宣言の開始時に、それがstruct linkedlist
. これにより、後でnext
フィールドに遭遇したときにコンパイラが満足します。
typedef struct
{
...
} linkedlist;
上記により、次のように変数を宣言できるようになります。
linkedlist thisIsALinkedList;
しかし問題は、これが構造体の最後でコンパイラによってのみ解析されることです。したがって、到達したとき、それが struct linkedlist *next
何であるかはわかりませんlinkedlist
(また、到達したとしても、宣言は正しくないはずlinkedlist *next
です。