我怎么知道动态分配阵列的特定位置是否为空



如果我声明一个数组:

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]是一个非初始化的intarray[5]已经在该位置返回int,因为arrayint*,因此请说明它没有意义。

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

否使用 *或[]使用

*(array+5) == NULL

array[5] == NULL

,但不是因为数组是指向int或int数组的指针(这是同一件事,这取决于您想如何看到它)。 *array[5]将是插槽5的INT指针指向的整数,相当于**(array+5)。当心,如果要测试NULL,则必须将内存设置为Malloc之后的0。使用memset(数组,0,10*sizeof(int))。

最新更新