我很困惑为什么会收到这个警告:
我发起matchObsFlag:
int *matchObsFlag=0;
但是当我跑这条线时:
if (matchObsFlag == 1)
我收到了这个警告。有什么想法吗?
答案 0 :(得分:13)
您肯定会收到警告,因为您没有将{1}转换为(int*) 1
,因此您测试了不同事物之间的相等性:地址和int。
所以它取决于你想做的事情if(matchObsFlag == (int*)1)
或if(*matchObsFlag == 1)
。
答案 1 :(得分:9)
int *matchObsFlag=0;
matchObsFlag
的类型为int*
,而常量字面值为int
类型。不相关类型之间的比较导致警告。
matchObsFlag
是一个NULL指针。如果您希望比较指针指向的值,matchObsFlag
需要指向有效的内存位置。
int number = 1;
matchObsFlag = &number;
现在,要比较该值,您需要取消引用指针。所以试试 -
if (*matchObsFlag == 1)
{
// ...
}