gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:46 25 4
gpt4 key购买 nike

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

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

最佳答案

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

(int*)cols 可能是 NULL 或任何其他地址,因此这是您应该检查的变量,并且 ((int*)cols) [1] 是放在地址 cols {some address} + sizeof(int)

中的 int

所以,if (((int*)cols)[1]==NULL) 应该是 if (cols)==NULL) {it在检查 NULL}value=((int *)cols)[1]; 就好了

关于指针和整数 ('int' 和 'void *' 之间的比较)- C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43570713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com