10

我很困惑为什么会收到此警告:

我用以下方式启动 matchObsFlag:

int *matchObsFlag=0;

但是当我运行这一行时:

    if (matchObsFlag == 1)

我收到这个警告。有任何想法吗?

4

2 回答 2

15

您肯定会收到警告,因为您没有像这样强制转换 1,(int*) 1因此您测试了不同事物之间的相等性:地址和 int。

所以它要么是要么if(matchObsFlag == (int*)1)取决于 if(*matchObsFlag == 1)你想要做什么。

于 2013-09-07T12:59:41.147 回答
10
int *matchObsFlag=0;

的类型matchObsFlagint*,而常量字面量的类型是int。不相关类型之间的比较导致警告。

matchObsFlag是一个空指针。matchObsFlag如果要比较指针指向的值,则需要指向一个有效的内存位置。

int number = 1;
matchObsFlag = &number;

现在,要比较值,您需要取消引用指针。所以试试——

if (*matchObsFlag == 1)
{
  // ...
}
于 2013-09-07T13:01:31.723 回答