我试图打印一些整数数据,其中包括整数0
,但我想忽略包含NULL
的数据,而不是打印它。但是我的C代码不能区分0
和NULL
,并且把它们当作是相同的。
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的列表时,它会把它当作是一个空列表。有什么解决办法吗?
发布于 2022-02-20 13:58:54
在测试传递给函数的struct node
指针是否为空指针和指向的列表中节点的整数data
成员的值之间存在混淆。
C中使用NULL
作为宏来表示空指针常量。它用于测试空指针。0
也是指针上下文中的空指针常量。与SQL不同的是,对于数值,在C中没有空值的概念。
下面是您的代码的修改版本:
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");
}
发布于 2022-02-20 13:42:17
C标准不提供表示整数以外的任何值的整数类型。没有null或“NULL”值,意思是“无任何整数值”。
宏NULL
用于指针,而不是整数。它是一个空指针常量。对于指针,NULL
是一个值,用于指示指针没有指向任何事物(某些对象或函数)。它不应与整数连用。您可以使用指针NULL
和指针p
来确定它是否指向结构,也可以将它与p->next
一起使用以确定是否有另一个节点链接到该结构。
如果结构可能包含数据,也可能不包含数据,那么通常应该创建结构的另一个成员,该成员指示结构是否包含数据(和/或可能包含多少数据或数据类型)。或者,您可以指定一些整数值,这些值可以在data
成员的类型中表示,您永远不会使用它的整数值作为结构中没有数据的指示符。
https://stackoverflow.com/questions/71194917
复制相似问题