首先你要明白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 {
Link next; // Node * next;
}
注意我把typedef置於結構體node的定義之前(這是一個C成語)。它的好處是C編譯器會先看見別名定義,所以在結構體node的定義裡面我就已經可以用其別名Link或者Node來宣告變數或指標了。你可以把typedef置於結構體node的定義之後,寫作
struct node * next;
但這樣你就不能在node的定義裡面用定義完才給的別名Node或Link了。所以你看到裡面next的宣告用的是struct node *。
最後,
仍然是一個緊湊的寫法,等價於:
typedef struct node * Link;
第一條語句給struct node(結構體node本身)一個別名Node。第二條語句給struct node *(指向node結構體的指標)一個別名Link。
首先你要明白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。