如何初始化只有NULL指针的字符串数组?

时间:2015-04-13 14:46:51

标签: c arrays pointers

我必须初始化一个只包含NULL指针的字符串数组,没有别的。如果我理解正确分配NULL指针,如下所示:

char **array = NULL;

否则,我试过

char *array[] = {NULL};

但是NULL指针的空间应该动态分配,在这里我很困惑,我的代码不起作用。

char **array = (char**)malloc(sizeof(char*));

如果你能帮助我,我将非常感激。

3 个答案:

答案 0 :(得分:5)

  • char **array = NULL;不是数组,而是指向指针的指针。出于某种原因,这是一个常见的误解。指针指针和数组之间没有关系。特别是,指向指针的指针不是 2D数组。

  • char *array[] = {NULL};这是一个包含1个数组项的指针数组。

  • char **array = (char**)malloc(sizeof(char*));这是非常常见但不好的做法。不要使用这种方法,你将创建一个在整个堆中散布的碎片查找表。

您应该使用this method在堆上分配一个真正的多维数组。一旦你完成了这个,你可以memset()整个数组为零,如果在你的系统上将NULL实现为零(在奇怪的情况下,它不是,你必须设置每个通过循环手动替换数组的项目。

作为旁注,Do I cast the result of malloc?

答案 1 :(得分:5)

这应该这样做:

char **array = malloc(1 * sizeof *array);
array[0] = NULL;

这假定分配成功,您应该在实际代码中依赖它之前测试它。 1表示“1个元素的数组”,它当然是多余的,但我觉得它增加了一些清晰度。

上面声明了一个指向(数组)字符指针的指针,并试图为1这样的字符指针分配空间。

实际上这样做似乎毫无意义,但我无法理解你的想法,想弄你应该做些什么。 :)

答案 2 :(得分:0)

NULL指针始终具有指针的大小。你无法改变指针的大小。

您尝试的前两种方法都可以。您正在创建char **类型的变量,然后为其赋值NULL。您无法更改该变量的大小。