如何理解结构中包含一个指向结构本身的指针?


Author: Kimmy

如何理解结构中包含一个指向结构本身的指针?

知乎链接


这种其实是Recursive Data Type

题主所说的链表,大致可以看成这种结构:

其实去掉最开始的那个是结点(42),余下的两个结点还是能够构成一个链表。
也即一个类型实例中可能会包含另一个同样类型的实例。
这就是为什么会被称为递归数据类型的原因。
上面的结构对应到Haskell中如下:
data List e = Nil | Cons (e, List e)   -- List type

Cons(42, Cons(69, Cons(613, Nil))) -- the list

或者对应到Java也很明显:
class List<E> {
E value;
List<E> next;
}
但是在C语言里面,因为默认是值语义,所以不可能出现像Java这种写法(首先定义在类型的时候就会出错,其次,就算不出错也会出现某答案中sizeof无穷的问题)。
于是只好用指针来代替了。
typedef int ElementType;
struct List {
ElementType value;
struct List* next;
}
至于该指针如何指向,就只能看题主想要的是什么了,只要能清晰地画出来上面那个图的样子,就能理解这一点了。

创建时间:2014-12-16 最近更新时间:2023-11-03