This question already has answers here:
Why whole structure can not be compared in C, yet it can be copied?

(6个答案)


6年前关闭。




代码1:
struct demo
{
    int a;
}d[2];

int main()
{
    d[0].a=5;
    d[1]=d[0];
    return 0;
}

此代码可以正常工作

代码2:
struct demo
{
    int a;
}d[2];

int main()
{
    d[0].a=5;
    d[1]=d[0];
    if(d[0]==d[1])
    {
        printf("hello");
    }
return 0;
}

此代码给出错误
error: invalid operands to binary == (have 'struct demo' and 'struct demo')

为什么在Code 2中会出现此错误?

最佳答案

您需要自己比较结构的成员,如下所示:

if(d[0].a ==d[1].a)

结构不是相等的有效操作数(==),操作数必须是算术类型或指针。我们可以从draft C99 standard部分6.5.9平等运算符中看到这一点:


  • 这两个操作数的算术类型均为
  • 这两个操作数都是指向兼容类型的合格或不合格版本的指针;
  • 一个操作数是指向对象或不完整类型的指针,另一个是指向对象的指针。
    无效的合格或不合格版本;或
  • 一个操作数是一个指针,另一个是空指针常量。
  • 10-04 15:15