回覆列表
  • 1 # 使用者6284825556109

    首先你要明白typedef的作用。typedef是C語言裡的一個關鍵字,用來給一個類型別名(化名)。比如

    typedef int size_t;

    typedef struct node Node;

    第一個例子給內建型別int一個別名size_t。第二個例子給struct node一個別名Node。這裡你看到了typedef的兩個常用情況。第一個例子用以給一個通用型別更具化的別名,這往往會增加你的程式碼的可讀性。第二個例子用以簡化程式碼的繁複性,每當你需要宣告一個struct node變數的時候,你可以直接用Node。

    你的例子

    typedef struct node {

    struct library data;

    struct node *next;

    } Node, * Link;

    只是一個比較緊湊的寫法,等價於如下寫法:

    typedef struct node Node, * Link;

    struct node {

    struct library data;

    Link next; // Node * next;

    }

    注意我把typedef置於結構體node的定義之前(這是一個C成語)。它的好處是C編譯器會先看見別名定義,所以在結構體node的定義裡面我就已經可以用其別名Link或者Node來宣告變數或指標了。你可以把typedef置於結構體node的定義之後,寫作

    struct node {

    struct library data;

    struct node * next;

    }

    typedef struct node Node, * Link;

    但這樣你就不能在node的定義裡面用定義完才給的別名Node或Link了。所以你看到裡面next的宣告用的是struct node *。

    最後,

    typedef struct node Node, * Link;

    仍然是一個緊湊的寫法,等價於:

    typedef struct node Node;

    typedef struct node * Link;

    第一條語句給struct node(結構體node本身)一個別名Node。第二條語句給struct node *(指向node結構體的指標)一個別名Link。

  • 中秋節和大豐收的關聯?
  • 為什麼打仗時都用刀怎麼不用劍?