首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何区分C中的0和NULL

如何区分C中的0和NULL
EN

Stack Overflow用户
提问于 2022-02-20 05:33:11
回答 2查看 93关注 0票数 0

我试图打印一些整数数据,其中包括整数0,但我想忽略包含NULL的数据,而不是打印它。但是我的C代码不能区分0NULL,并且把它们当作是相同的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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");
}

当我传递一个包含第一个节点中的值0的列表时,它会把它当作是一个空列表。有什么解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-20 05:58:54

在测试传递给函数的struct node指针是否为空指针和指向的列表中节点的整数data成员的值之间存在混淆。

C中使用NULL作为宏来表示空指针常量。它用于测试空指针。0也是指针上下文中的空指针常量。与SQL不同的是,对于数值,在C中没有空值的概念。

下面是您的代码的修改版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void ecrire(struct node *p) {
    if (p == NULL) { // if the node pointer is 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");
}
票数 4
EN

Stack Overflow用户

发布于 2022-02-20 05:42:17

C标准不提供表示整数以外的任何值的整数类型。没有null或“NULL”值,意思是“无任何整数值”。

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71194917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文