如果我声明一个数组:
int *array;
array=(int *)malloc(10*sizeof(int));
和...我想知道数组[5]是否为空,我该怎么办?
if(*array[5]==NULL){
printf("is it correct? ");
}
预先感谢!
如果在使用任何内容之前用nulls填充数组,然后将null放在'清空'之后将null放入数组插槽中,则是的,然后您需要这样的代码:
if (array[5] == NULL) {
printf("Cell 5 is empty");
}
您不需要*
。
另外,malloc不会用零来预填充它,所以不要依靠。
但是,在这种情况下,将空数字放入阵列并没有多大意义。NULL是空指针的特殊值,array
的各个元素不是。在这种情况下,您只想存储其他"空"值,例如0或-1,如您的情况所需的。
如果您 DID 希望array
存储指针,则需要将其声明更改为类似的内容:
int **array
,它使其成为双重指针或一系列指针,具体取决于您的使用方式。分配它可以这样工作:
int **array;
array = malloc(sizeof(int*) * 10);
在这一点上, array
的每个元素都是指针,然后您可以使用*
操作员解释。
array[5]
是一个非初始化的int
。array[5]
已经在该位置返回int
,因为array
是int*
,因此请说明它没有意义。
它不是空的,从中读取也是非法的。
否使用 *或[]使用
*(array+5) == NULL
或
array[5] == NULL
,但不是因为数组是指向int或int数组的指针(这是同一件事,这取决于您想如何看到它)。 *array[5]
将是插槽5的INT指针指向的整数,相当于**(array+5)
。当心,如果要测试NULL,则必须将内存设置为Malloc之后的0。使用memset(数组,0,10*sizeof(int))。