【问题标题】:comparison between pointer and integer ('int' and 'void *') - C指针和整数之间的比较('int'和'void *') - C
【发布时间】:2017-04-23 11:43:38
【问题描述】:

我正在尝试检查数组的索引是否有值。

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

【问题讨论】:

  • 只有指针可以是NULL((int*)cols)[1]int,而不是指针。并且没有“空变量”之类的东西,因此您无法检查数组是否具有分配给它的某些值。你,程序员,需要跟踪它。

标签: c pointers comparison void


【解决方案1】:

cols 是一个指针。在使用int * 进行转换后,它仍然是一个指针,但现在您将其视为指向int 的指针。在编写((int*)cols)[1] 时,您将void* cols 转换为int*,然后取消引用它,这意味着您现在查看int,这就是您无法检查NULL 的原因。

(int*)cols 可能是 NULL 或任何其他地址,因此这是您应该检查的变量,((int*)cols)[1] 是地址 int 中的 int

所以,if (((int*)cols)[1]==NULL) 应该是 (cols)==NULL) {在检查 NULLvalue=((int*)cols)[1]; 时,它是 void* 还是 int* 都没关系}

【讨论】:

    猜你喜欢
    • 2020-02-07
    • 2012-07-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多