C 错误:二进制==(具有';结构演示';和';结构演示';)的操作数无效

C 错误:二进制==(具有';结构演示';和';结构演示';)的操作数无效,c,arrays,struct,compiler-errors,equality,C,Arrays,Struct,Compiler Errors,Equality,代码1: 这个代码很好用 代码2: struct demo { int a; }d[2]; int main() { d[0].a=5; d[1]=d[0]; return 0; } 这段代码给出了一个错误 struct demo { int a; }d[2]; int main() { d[0].a=5; d[1]=d[0]; if(d[0]==d[1]) { printf("hello");

代码1:

这个代码很好用

代码2:

struct demo
{
    int a;
}d[2];

int main()
{
    d[0].a=5;
    d[1]=d[0];
    return 0;
}
这段代码给出了一个错误

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;
}

为什么代码2中会出现此错误?

C不支持结构比较。您必须通过逐个比较所有成员来比较结构


C不支持结构比较。您必须通过逐个比较所有成员来比较结构


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

error: invalid operands to binary == (have 'struct demo' and 'struct demo')
结构不是相等的有效操作数(
==
),操作数必须是算术类型或指针。我们可以从
6.5.9
相等运算符一节中看到这一点:

下列情况之一应适用:

  • 两个操作数都具有算术类型
  • 两个操作数都是指向兼容类型的合格或不合格版本的指针
  • 一个操作数是指向对象或不完整类型的指针,另一个是指向对象的指针 合格或不合格版本无效;或
  • 一个操作数是指针,另一个是空指针常量

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

error: invalid operands to binary == (have 'struct demo' and 'struct demo')
结构不是相等的有效操作数(
==
),操作数必须是算术类型或指针。我们可以从
6.5.9
相等运算符一节中看到这一点:

下列情况之一应适用:

  • 两个操作数都具有算术类型
  • 两个操作数都是指向兼容类型的合格或不合格版本的指针
  • 一个操作数是指向对象或不完整类型的指针,另一个是指向对象的指针 合格或不合格版本无效;或
  • 一个操作数是指针,另一个是空指针常量

您不能将任意结构与
===
进行比较,也不能编写自己的比较函数或使用
memcmp
@Barmar为什么在这些答案中都提到
memcmp
?我不明白,结构可以有我们不知道其值的填充。另一个链接的答案很奇怪。你不能将任意结构与
==
进行比较,不能编写自己的比较函数,也不能使用
memcmp
@Barmar为什么在这些答案中谈论
memcmp
?我不明白,结构可以有我们不知道其值的填充。另一个链接的答案,太奇怪了。