我试图检查数组的索引是否有值。
void * cols;
...
...
if (((int*)cols)[1]==NULL){
counter++;
columns++;
}
else
{
value=((int*)cols)[1];
fprintf(f, "Validation result from process id: %u. :column %d is invalid\n", (unsigned int)thread_10,value);
}
这给了我警告"指针和整数之间的比较(' int'和' void *')" 。我究竟做错了什么 ?我怎样才能检查索引是否为空?此外,我无法检查0,因为在我的情况下0表示有效值,这意味着如果索引保持值0表示其有效。
答案 0 :(得分:1)
cols
是一个指针。使用int *
进行转换后,它仍然是一个指针,但现在您将其视为指向int
的指针。在撰写((int*)cols)[1]
时,您抓住了void* cols
,将其投放int*
然后取消引用它,这意味着您现在查看int
,这就是您无法检查NULL
的原因1}}。
(int*)cols
可能是NULL
或任何其他地址,因此这是您应该检查的变量,而((int*)cols)[1]
是放置在地址int
中的cols {some address} + sizeof(int)
值}}
因此,if (((int*)cols)[1]==NULL)
应该是(cols)==NULL)
{在检查void*
}时,int*
或NULL
无关紧要/ em>和value=((int*)cols)[1];
很好