2017-04-23 67 views
0

我试图检查一个数组的索引是否有值。指针和整数之间的比较('int'和'void *') - C

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

只有指针可以是'NULL'。 '((int *)cols)[1]'是一个'int',而不是指针。并没有“空变量”这样的东西,所以你不能检查一个数组是否有一些值赋予它。你,程序员,需要跟踪它。 –

回答

1

cols是一个指针。在使用int *进行投射之后,它仍然是一个指针,但现在您将它看作指向int的指针。当你写((int*)cols)[1]你把你的void* cols,铸造它int*,然后解除它,这意味着你现在看看int,这就是为什么你不能检查NULL

(int*)cols可能是NULL,或者任何其它地址,所以这是你应该检查变量,((int*)cols)[1]int值放在地址cols {some address} + sizeof(int)

所以,if (((int*)cols)[1]==NULL)应该是如果(cols)==NULL){没关系如果是void*int*NULL}value=((int*)cols)[1];检查时,仅仅是罚款

相关问题