C语言中如何区分0和NULL

Saa*_*t03 0 c

我正在尝试打印一些包含 integer 的整数数据0,但我想忽略包含它的数据NULL而不打印它。但我的 C 代码无法区分0NULL并将它们视为相同。

void ecrire(struct node *p) {
    if (p->data == NULL) {   'if the first node contains NULL it means list is empty'
        printf("no items!\n");
        return;
    }
    struct node *temp = p;
    while (temp != NULL) {
        printf("%d ", temp->data);
        temp = temp->next;
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

当我传递第一个节点中包含值 0 的列表时,它会将其视为空列表。请问有什么解决办法吗?

Eri*_*hil 6

C 标准不提供整数类型来表示除整数之外的任何值。没有 null 或 \xe2\x80\x9cNULL\xe2\x80\x9d 值,这意味着 \xe2\x80\x9c 不是任何整数值。\xe2\x80\x9d

\n

该宏旨NULL在与指针一起使用,而不是与整数一起使用。它是一个空指针常量。对于指针,NULL是一个用于指示指针未指向任何事物(某些对象或函数)的值。它不应该与整数一起使用。您可以使用NULLwith 指针p来确定它是否指向一个结构,并且可以使用它来p->next确定是否有另一个节点链接到该结构。

\n

如果结构可能包含也可能不包含数据,那么通常您应该创建结构的另一个成员来指示它是否包含数据(和/或可能包含多少数据或什么类型的数据)。或者,您可以指定一些可以用成员类型表示的整数值data,但您永远不会将其整数值用作结构中不存在数据的指示符。

\n