指针和整数之间的比较(' int'和' void *') - C.

时间:2017-04-23 11:43:39

标签: c pointers comparison void

我试图检查数组的索引是否有值。

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表示其有效。

1 个答案:

答案 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];很好