如何知道动态分配数组的特定位置是否为NULL?

时间:2012-11-02 13:32:12

标签: pointers

如果我声明一个类似的数组:

int *array; 
array=(int *)malloc(10*sizeof(int));

而且......我想知道数组[5]是否为空,我该怎么办?

if(*array[5]==NULL){
    printf("is it correct? ");
}

提前致谢!

3 个答案:

答案 0 :(得分:1)

如果在对数组做任何事情之前用NULL填充数组,那么在“清空”之后将NULL放入数组槽中,然后是,然后你需要这样的代码:

if (array[5] == NULL) {
    printf("Cell 5 is empty");
}

您不需要*

此外,malloc不会预先填充NULL,因此不要依赖它。

但请注意,在这种情况下,将NULL放在数组中没有多大意义。 NULL是空指针的特殊值,array的各个元素不是。在这种情况下,您只需要根据您的情况需要存储其他一些“空”值,例如0或-1。

如果 希望array存储指针,则需要将其声明更改为:

int **array

这使得它成为双指针或指针数组,具体取决于您如何使用它。分配它可以这样工作:

int **array;
array = malloc(sizeof(int*) * 10);

此时,array的每个元素都是一个指针,然后您可以使用*运算符取消引用。

答案 1 :(得分:0)

没有用*或[] 使用

*(array+5) == NULL

array[5] == NULL

但不是两个,因为数组是一个指向int或int数组的指针(它是相同的,它取决于你想看到它的方式)。 *array[5]将是插槽5处int指针指向的整数,相当于**(array+5)。 请注意,如果要测试NULL,则必须在malloc之后将内存设置为0。 与memset(数组,0,10 * sizeof(int))。

答案 2 :(得分:0)

array[5]是未初始化的intarray[5]已经在该位置返回int,因为arrayint*,所以取消引用它是没有意义的。

它不是空的,从中读取也是非法的。