我有以下代码:
char alfabeto[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z'};
int i = 0;
printf("|");
do
{
printf("%c |",alfabeto[i]);
i++;
}while(alfabeto[i]!= '\0');
使用NULL我收到以下警告:
warning: comparison between pointer and integer [enabled by default] in C
但是'\0'
编译好了。我知道哪个'\0'
用于终止char字符串,NULL用于与指针进行比较。但他们没有相同的价值吗?
答案 0 :(得分:3)
在大多数实现中,NULL和'\0'
具有相同的值:两者都为零。区别在于数据类型:NULL是指针,而另一个是int
。将指针与不是指针的任何东西进行比较并不是很有意义,这就是编译器给你警告的原因。
答案 1 :(得分:2)
它们具有相同的值,但类型不同。
\0
与0
NULL
是实现定义的,但通常与(void*)0
相同。您应该始终考虑使用正确类型的表达式。
答案 2 :(得分:1)
NULL
类型为void*
,但'\0'
的类型为int
。
void*
是指针,因此我的机器上有8个字节。 int
是4个字节。
在C ++中,'\0'
是1个字节的char