【发布时间】:2015-12-17 11:07:47
【问题描述】:
我在 C 中了解到这一点:null char == '\0' == NULL,然后我在下面编写了一个循环来读取 C 中 char[] 的开头到结尾。
// case #1
char buf[32];
while (buf[i] != NULL){
//do something...
}
但是,我的 gcc 编译器给了我一个警告:指针和整数之间的比较。有人提到我混淆了两个独立的概念:NULL 用于指针,而 '\0' 用于字符。所以为了摆脱警告,我应该使用'\0',因为我的循环测试了一个字符。
现在我正在编写一个链表,并测试一个头指针是否指向一个节点。由于它是结构,因此使用if (h1 == NULL) 是合理的,但显然当我使用if (h1 == '\0') 时编译器也会编译,即使节点是结构而不是字符。有人可以提供一些帮助,为什么在这种情况下可以同时使用 '\0' 和 NULL 而在第一种情况下不能同时使用它们?
// case #2
struct ListNode {
int val;
struct ListNode *next;
};
【问题讨论】:
-
在需要时在字符串中使用
\0作为终止符。将 NULL 用于不指向任何内容的指针(例如,链表的末尾。它们并不相同,即使它们在某些情况下可以互换。
标签: c pointers linked-list