如果我声明一个数组,如:
int *array;
array=(int *)malloc(10*sizeof(int));
而且...我想知道数组[5] 是否为空,我该怎么办?
if(*array[5]==NULL){
printf("is it correct? ");
}
提前致谢!
如果我声明一个数组,如:
int *array;
array=(int *)malloc(10*sizeof(int));
而且...我想知道数组[5] 是否为空,我该怎么办?
if(*array[5]==NULL){
printf("is it correct? ");
}
提前致谢!
如果在对数组进行任何操作之前用 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
都是一个指针,然后您可以使用*
运算符取消引用。
不使用 * 或 [] 使用
*(array+5) == NULL
或者
array[5] == NULL
但不是两者都因为 array 是指向 int 或 int 数组的指针(它是同一件事,这取决于您希望如何查看它)。
*array[5]
将是槽 5 处的 int 指针指向的整数,相当于**(array+5)
. 请注意,如果要测试 NULL,则必须在 malloc 之后将内存设置为 0。使用 memset(array, 0, 10*sizeof(int))。
array[5]
是一个未初始化的int
. array[5]
已经int
在那个位置返回了,因为array
是一个int*
,所以取消引用它没有意义。
它不是空的,从中读取也是非法的。