C++-Typedef結構體遇上指針


  繼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應該就是節點。

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM