很简单,C语言中,结构体所占用内存必须在编译时确定,如果一个结构体中含有它本身,那么这个结构体所占用的内存大小是多少呢?这会循环形成一个永远也无法计算清楚的数值;如果是结构体指针,那么久好说了,指针只占用4个字节,因此可以成为结构体成员。能理解么?
可以以一个例子来理解这件事:对于一个网页,既可以在其上添加链接到其他网页的链接,也可以添加链接到自身的链接,并且链接到的网页上还可以存在链接回来原网页的链接。但是你不能在网页里直接内嵌一个网页,你只能添加一个指向关系,而指向关系并不是网页本身。
这个指向自定义类型变量的指针变量,其实只是存储自定义类型变量间相互指向关系的一个变量而已。它本身并没有循环引用它自己,因为指向关系并不是所指的变量本身。指向关系类型(指针类型)是独立于被指类型被定义的。