C 错误:二进制==(具有';结构演示';和';结构演示';)的操作数无效
代码1: 这个代码很好用 代码2: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");
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
?我不明白,结构可以有我们不知道其值的填充。另一个链接的答案,太奇怪了。