繼Typedef遇上結構體數組后,我們又產生了新的疑問。
上一期地址:https://www.cnblogs.com/lemaden/p/10122929.html
昨天一位朋友又問我了,說結構體數組遇上typedef我懂了,就是數組擁有三個特性:1.首地址 2.數組的長度 3. 數組的步長(元素類型),typedef只是重定義了數組的長度和類型。
那么今天的typedef跟結構體指針你怎么解釋呢?我們看下問題的代碼:
typedef struct LNode { // Singly linked list Node int data; struct LNode *next; // Pointer to next node }LNode,*LinkList;
在鏈表中定義節點時,經常會看到上面的第四行,strcut LNode *next,這里仿佛是在邊定義節點類型,又在里面定義指針域,其實這樣是可以的,記住:在C語言中,只有這里可以這樣用,其他地方都不可以,而且只能是指針,不能是結構體變量,否則會陷入無限遞歸。
第三行就不用解釋了,一個數據域。那么三四行我們都解決了。繼續往下走。
第五行右括號 { 第一個類型LNode比較好解釋。
是為struct LNode 創建一個簡單的別名,以后就用LNode代替它了。
那么*LinkList呢?
我們把它單純拿出來:
typedef struct LNode { // Singly linked list Node int data; struct LNode *next; // Pointer to next node }*LinkList;
一句話解釋清楚:把* 與前面的struct LNode放在一起,是不是就清楚了?
typedef struct LNode {....}* LinkList
我們可以拿基本類型來示范下:
typedef int* Pointer;
Pointer p; //指向整型類型的指針P
那么回到上面的例子,LinkList 是不是就是指向結構體類型的指針了。
這里的LinkList應該就是頭指針了,指向整個鏈表,而前面的LNode應該就是節點。