typedef struct和struct的區別(學習數據結構的單鏈表過程中遇到的問題)

最近在學數據結構時,有一些疑惑,在下圖中:

可以看到,在定義單鏈表時,對next指針的定義方式是struct Lnode *next,表示next是指向Lnode類型的一個指針。在定義指向節點p的指針的時候,用的是Lnode *p,注意此處沒有struct。因此很好奇,爲什麼同樣是指向結構體的指針,一個在定義的時候要加上struct,一個不用呢?

對於定義指向節點p的指針,用的是Lnode *p,這個不難理解,就是利用typedef爲結構體類型struct Lnode取了一個別名Lnode。原本應該用struct Lnode *p定義指向節點p的指針,此時被簡化爲了Lnode *p,省去了struct。那麼在結構體中,next也是指向Lnode類型的結構體指針,爲什麼定義next就不能用類似於Lnode *next的形式表示,從而省略掉struct呢?

 

原因如下:在新的結構體的建立過程中,遇到了next的類型聲明,類型是Lnode,而Lnode表示的是結構體類型的新名字。但在此時,由於這個新的結構體類型本身還沒有建立完成,那麼這個類型的新名字也就還不存在。編譯器此時根本不認識Lnode,因此如果用Lnode *next的形式,編譯器就會報錯。

 

如果有理解不到位的地方,還請大家指正,多多交流!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章