什么是 C 中的空指针


#include <stdio.h>
int main(void)
{
    struct findEntry
    {
        int value;
        struct entry *next;
    };
    struct entry n1, n2, n3;
    struct entry *list_pointer = &n1;
    n1.value = 100;
    n1.next = &n2;
    n2.value = 200;
    n2.next = &n2;
    n3.value = 300;
    n3.next = (stuct entry *) 0;
    while (list_pointer != (struct entry *)0) {
        printf("%in", list_pointer->value);
        list_pointer = list_pointer->next;
    }
    return 0;
}

我不明白语法(struct entry *) 0在这里是什么意思。在我正在阅读的书中,它说它是一个空指针。我试着在网上寻找,但我不知道该输入什么。我得到的"空指针"的谷歌搜索结果与我的预期不同。

任何值为 0 的指针类型都称为空指针。以下是 C 标准 §6.3.2.3 的解释:

  1. 值为 0 的整数常量表达式或此类表达式 强制转换为类型 void *,称为空指针常量。如果为空 指针常量转换为指针类型,得到的结果 指针,称为空指针,保证与 指向任何对象或函数的指针

空指针是指向内存地址 0 的指针。 大多数系统保留此地址,以便没有对象驻留在其中。 此保留允许将其用作空白地址。

如果您尝试从空指针读取或写入,您将收到运行时错误,有时称为分段错误或空指针异常。

在您的示例中,空指针用于指示列表的结尾。 因此,此条件(struct entry *) 0,检查您是否已到达列表末尾并且迭代应停止

通常,使用常量 NULL 而不是文字值 0 会考虑更好的形式。 这使得代码更具可读性,并且还涵盖了 NULL 指针不是 0 的极少数情况

强制转换(struct entry *)只是为了避免编译器警告,因为文本 0 的类型是整数而不是指针。 这是使用常量 NULL 的另一个原因,因为它通常定义为 (void*) 0 在没有编译器警告的情况下与任何指针值相比都很好

它与 NULL 完全相同,即 C 标准中定义的 (void *(0。

空指针初始化为无效或标记为未初始化。空指针也可用而不是下一个指针,因此也指示列表的结尾。

相关内容

  • 没有找到相关文章