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

Pointers 如何知道动态分配数组的特定位置是否为空?,pointers,Pointers,如果我声明一个数组,如: int *array; array=(int *)malloc(10*sizeof(int)); 而且。。。我想知道如果数组[5]是空的,我该怎么办 if(*array[5]==NULL){ printf("is it correct? "); } 提前谢谢 没有用*或[] 使用 或 但不能两者兼而有之,因为数组是指向int或int数组的指针(这是同一件事,取决于您希望如何查看它)。 *array[5]将是int指针指向插槽5的整数,相当于**(array

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

int *array; 
array=(int *)malloc(10*sizeof(int));
而且。。。我想知道如果数组[5]是空的,我该怎么办

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

没有用*或[] 使用

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

没有用*或[] 使用

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

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


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

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


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

如果在对数组执行任何操作之前先用NULL填充它,然后在“清空”它之后将NULL放入数组插槽中,那么是的,那么您需要这样的代码:

if (array[5] == NULL) {
    printf("Cell 5 is empty");
}
您不需要
*

另外,malloc不会预先填充null,所以不要依赖它

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

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

int**array

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

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

此时,
数组的每个元素都是一个指针,您可以使用
*
操作符解除对该指针的引用。

如果您在对数组执行任何操作之前先用空值填充数组,然后在“清空”数组槽后将空值放入数组槽中,则需要这样的代码:

if (array[5] == NULL) {
    printf("Cell 5 is empty");
}
您不需要
*

另外,malloc不会预先填充null,所以不要依赖它

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

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

int**array

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

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

此时,
array
的每个元素都是一个指针,您可以使用
*
操作符解除对该指针的引用。

使用
calloc
对数组进行零初始化没有“空”这样的事情。你必须重新考虑。使用
calloc
将数组初始化为零没有“空”这样的东西。当你说用空值填充数组时,我想是这样的:for(I=0;i@FrankProgamer是的,这是一种方法。还有一些标准库函数可以用来将内存块初始化为一个值,但这是最明显的方法。Telgin,但是…如果我尝试这样做,“赋值从指针生成整数,无需强制转换"@FrankProgamer哦,等等,是的,这很有意义。对不起,NULL是指针,但数组的各个元素不是指针。如果你想让它们成为指针,你需要将数组声明为
int**array
。如果你只想在数组中包含整数,那么你想改为赋值0,或者其他一些“空”值。我会将我的答案更新为refl当你说用空值填充数组时,我想是这样的:for(I=0;i@FrankProgamer是的,这是一种方法。还有一些标准库函数可以用来将内存块初始化为一个值,但这是最明显的方法。Telgin,但是…如果我尝试这样做,“赋值从指针生成整数,无需强制转换"@FrankProgamer哦,等等,是的,这很有意义。对不起,NULL是指针,但数组的各个元素不是指针。如果你想让它们成为指针,你需要将数组声明为
int**array
。如果你只想在数组中包含整数,那么你想改为赋值0,或者其他一些“空”值。我会将我的答案更新为reflect this.我可以用for来填充数组中的空值吗?@Frank是的,你可以,但效率较低。memset通常在Assembly中进行优化,但是…如果我尝试这样做,“赋值从指针生成整数,而不进行强制转换”,无论如何,感谢您的帮助,我想我只是误导了…整数在C中不是对象,因此不是指针…使用NULL进行测试等同于使用0进行测试,但这是您想要的吗?0=NULL?要编译它,您必须强制转换。然而,尽管我关于指针算法的评论是有效的,但我认为Luchian有最好的答案。:-)我可以用for来填充空数组吗?@Frank是的,你可以,但效率会低一些。memset通常在assembly中被优化,但是……如果我尝试这样做,”赋值使