2017-04-23 120 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];檢查時,僅僅是罰款

相關問題