为什么NULL与' \ 0'不同

时间:2014-11-13 06:37:51

标签: c pointers char

我有以下代码:

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用于与指针进行比较。但他们没有相同的价值吗?

3 个答案:

答案 0 :(得分:3)

在大多数实现中,NULL和'\0'具有相同的值:两者都为零。区别在于数据类型:NULL是指针,而另一个是int。将指针与不是指针的任何东西进行比较并不是很有意义,这就是编译器给你警告的原因。

答案 1 :(得分:2)

它们具有相同的值,但类型不同。

  • \00
  • 相同
  • NULL是实现定义的,但通常与(void*)0相同。

您应该始终考虑使用正确类型的表达式。

答案 2 :(得分:1)

NULL类型为void*,但'\0'的类型为int

void*是指针,因此我的机器上有8个字节。 int是4个字节。

在C ++中,'\0'是1个字节的char