在 C 中,我必须始终将最后一个节点初始化为 NULL 吗?我通常会在教程和书籍中看到这种情况。但据我了解,一个未初始化的指针拥有与 NULL 指针相同的地址。那么为什么要初始化呢?
最佳答案
But to my understanding, an uninitialized pointer holds the same address as a NULL pointer
可能是(坏)运气。
在任何情况下,读出一个未初始化 指针都会调用未定义的行为。这是否会迟早导致崩溃(或任何其他“奇怪”行为)是未知的,因为未定义行为的本质。
然而,根据指针变量“所在”的内存分配方式,内存可能“已经”初始化,如果分配
- 静态或
- 通过调用
calloc()
这两种方法都分配内存并提前0
。对于大多数最近的系统来说,有一个指针变量(存在于这个内存中)携带 NULL
的值就足够了。
但请注意,仍然可能存在对 NULL
使用不同位模式的实现,而不仅仅是 0
位。因此,为了保持 100% 的可移植性,最好始终使用 NULL
显式初始化,而不是依赖于隐式清除内存。顺便说一句,这也有助于潜在读者阅读您的资料。
关于c - C 中的链表,最后一个节点指向 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31913059/