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的形式,编译器就会报错。
如果有理解不到位的地方,还请大家指正,多多交流!