【发布时间】:2015-08-10 06:39:23
【问题描述】:
在 C 中,我必须始终初始化指向 NULL 的最后一个节点吗?我通常会在教程和书籍中看到这种情况。但据我了解,未初始化的指针与 NULL 指针拥有相同的地址。那么为什么要初始化呢?
【问题讨论】:
-
未初始化保存未指定的值。这与 NULL 不同。
-
"未初始化的指针与 NULL 指针拥有相同的地址" 是这样吗?那么是什么将其初始化为 NULL
-
顺便说一句:没有必要将最后一个指针设置为 NULL。它必须是指示列表结尾的任何值。这可以是例如列表锚的地址,或者如果您喜欢值为 0xffffffff 的指针。但在大多数情况下,按惯例使用 NULL。这允许像
while (p->next) p=p->next这样的语法。 -
简短的回答是否定的,但您必须了解链表有 2 种类型(通常)。第一个是传统的 head/tail 列表,其中最后一个节点是
NULL,用作列表末尾的标记。第二种类型的链表是循环链表,其中最后一个节点的ptr->next指针始终保存链表开始的地址。不需要 NULL,因为迭代会一直持续到再次到达第一个节点。 (中间有许多列表类型)根据您的要求,一种可能比另一种更好。 -
@harper:不,它必须是 NULL 或真实对象的地址,而不仅仅是像
0xffffffff这样的任意值。否则,即使将它与另一个指针进行比较也是未定义的行为。
标签: c pointers null linked-list initialization