1

如果我声明一个数组,如:

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

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

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

提前致谢!

4

3 回答 3

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都是一个指针,然后您可以使用*运算符取消引用。

于 2012-11-02T13:34:31.817 回答
0

不使用 * 或 [] 使用

*(array+5) == NULL

或者

array[5] == NULL

但不是两者都因为 array 是指向 int 或 int 数组的指针(它是同一件事,这取决于您希望如何查看它)。 *array[5]将是槽 5 处的 int 指针指向的整数,相当于**(array+5). 请注意,如果要测试 NULL,则必须在 malloc 之后将内存设置为 0。使用 memset(array, 0, 10*sizeof(int))。

于 2012-11-02T13:34:15.770 回答
0

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

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

于 2012-11-02T13:34:25.367 回答