c - C 中的链表,最后一个节点指向 NULL?

标签 c pointers null linked-list initialization

在 C 中,我必须始终将最后一个节点初始化为 NULL 吗?我通常会在教程和书籍中看到这种情况。但据我了解,一个未初始化的指针拥有与 NULL 指针相同的地址。那么为什么要初始化呢?

最佳答案

But to my understanding, an uninitialized pointer holds the same address as a NULL pointer

可能是(坏)运气。

在任何情况下,读出一个未初始化 指针都会调用未定义的行为。这是否会迟早导致崩溃(或任何其他“奇怪”行为)是未知的,因为未定义行为的本质。

然而,根据指针变量“所在”的内存分配方式,内存可能“已经”初始化,如果分配

这两种方法都分配内存并提前0。对于大多数最近的系统来说,有一个指针变量(存在于这个内存中)携带 NULL 的值就足够了。

但请注意,仍然可能存在对 NULL 使用不同位模式的实现,而不仅仅是 0 位。因此,为了保持 100% 的可移植性,最好始终使用 NULL 显式初始化,而不是依赖于隐式清除内存。顺便说一句,这也有助于潜在读者阅读您的资料。

关于c - C 中的链表,最后一个节点指向 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31913059/

相关文章:

char *c = "12.3"我如何将 12.3 存储到 double 变量中

php - 从 PHP 添加到数据库插入 NULL

php - 为什么 $db PDO 对象在构造函数参数中作为 null 传递?

c - 为什么将指针分配给多维数组时得到 "incompatible pointer type"

c - 在 C 中,NULL 指针和指向 0 的指针有区别吗?如果是这样,什么?

c - GNU/Linux下获取fgetc处理Mac OS CR

c - 尝试打印 NULL 时的两种情况,一种有效,其他 SegFaults

C 程序将文件 io 传递给函数

arrays - 我需要帮助理解 "pointer to array of n integers"初始化的正确用法

c++ - 使用指针时遇到问题