如果我声明一个类似的数组:
int *array;
array=(int *)malloc(10*sizeof(int));
而且......我想知道数组[5]是否为空,我该怎么办?
if(*array[5]==NULL){
printf("is it correct? ");
}
提前致谢!
答案 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]
是未初始化的int
。 array[5]
已经在该位置返回int
,因为array
是int*
,所以取消引用它是没有意义的。
它不是空的,从中读取也是非法的。