最近在學數據結構時,有一些疑惑,在下圖中:
可以看到,在定義單鏈表時,對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的形式,編譯器就會報錯。
如果有理解不到位的地方,還請大家指正,多多交流!