什么是" 0"表示C中的2D char数组(char * [])

时间:2016-12-07 19:47:44

标签: c arrays char

我最近遇到了C面试编码问题。像" void Foo(char ** sarr)"这样的一般函数。它给了我一个输入

char* data[] = {"4352", "3242", "2432143", "234", "", "324", 0}

我是C的新手,但熟悉C ++。对于这种情况,我真的不知道这是什么' 0' 0意味着在这个char *数组中。我知道C有一个字符串终结符' \ 0'。但是0意味着什么?或者这个输入完全错误/无效? 提前谢谢。

4 个答案:

答案 0 :(得分:6)

0是在C中写入空指针常量的方法之一。如果他们写的话可能会更明显:

char* data[] = {"4352", "3242", "2432143", "234", "", "324", NULL};

等同。

空指针被用作数组末尾的指示符(类似于字符'\0'标记字符串结尾的方式。如果你在数组上进行迭代,你可以使用像:

for (var i = 0; data[i] != 0; i++) {
    // do something with data[i]
}

您也可以使用data[i] != NULL;,它们是等效的。

答案 1 :(得分:2)

在C / C ++中,NULL与数字0实际上是相同的。可以将NULL指针作为指针数组的元素。你的char *data[]是一个指针数组。

这会导致问题,因为在很多情况下区分整数0和NULL指针会很好。这就是为什么引入C ++ 11 nullptrnullptr_t的原因。我肯定会建议使用它们而不是NULL或0。

答案 2 :(得分:2)

您声明了一个指针数组,并且该数组的最后一个元素设置为零,这实际上是一个NULL指针。实际上,NULL宏通常定义为(void *) 0,尽管其值取决于实现。

答案 3 :(得分:-1)

NULL是一个通常定义为(void *)0的指针。这用于声明指向什么的指针,它通常用于显示列表/树的结尾,或者指针不是分配等。