0

cの単一のリンクリストの次の宣言の違いを誰かが説明できますか?より具体的には、なぜ最初のものが正しくないのですか?

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

vs

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

2 に答える 2

5

最初のケースでは、コンパイラは到達します

struct linkedlist *next;

そして、それは a が何であるかを知りませんstruct linkedlist

2 番目のケースでは、構造体宣言の開始時に、それがstruct linkedlist. これにより、後でnextフィールドに遭遇したときにコンパイラが満足します。

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

上記により、次のように変数を宣言できるようになります。

linkedlist thisIsALinkedList;

しかし問題は、これが構造体の最後でコンパイラによってのみ解析されることです。したがって、到達したとき、それが struct linkedlist *next何であるかはわかりませんlinkedlist(また、到達したとしても、宣言は正しくないはずlinkedlist *nextです。

于 2013-02-22T11:21:52.817 に答える