我必须初始化一个只包含NULL指针的字符串数组,没有别的。如果我理解正确分配NULL指针,如下所示:
char **array = NULL;
否则,我试过
char *array[] = {NULL};
但是NULL指针的空间应该动态分配,在这里我很困惑,我的代码不起作用。
char **array = (char**)malloc(sizeof(char*));
如果你能帮助我,我将非常感激。
答案 0 :(得分:5)
char **array = NULL;
不是数组,而是指向指针的指针。出于某种原因,这是一个常见的误解。指针指针和数组之间没有关系。特别是,指向指针的指针不是 2D数组。
char *array[] = {NULL};
这是一个包含1个数组项的指针数组。
char **array = (char**)malloc(sizeof(char*));
这是非常常见但不好的做法。不要使用这种方法,你将创建一个在整个堆中散布的碎片查找表。
您应该使用this method在堆上分配一个真正的多维数组。一旦你完成了这个,你可以memset()
整个数组为零,如果在你的系统上将NULL实现为零(在奇怪的情况下,它不是,你必须设置每个通过循环手动替换数组的项目。
答案 1 :(得分:5)
这应该这样做:
char **array = malloc(1 * sizeof *array);
array[0] = NULL;
这假定分配成功,您应该在实际代码中依赖它之前测试它。 1
表示“1个元素的数组”,它当然是多余的,但我觉得它增加了一些清晰度。
上面声明了一个指向(数组)字符指针的指针,并试图为1
这样的字符指针分配空间。
实际上这样做似乎毫无意义,但我无法理解你的想法,想弄你应该做些什么。 :)
答案 2 :(得分:0)
NULL指针始终具有指针的大小。你无法改变指针的大小。
您尝试的前两种方法都可以。您正在创建char **类型的变量,然后为其赋值NULL。您无法更改该变量的大小。