This question already has answers here:
Why whole structure can not be compared in C, yet it can be copied?
(6个答案)
6年前关闭。
代码1:
此代码可以正常工作
代码2:
此代码给出错误
为什么在Code 2中会出现此错误?
结构不是相等的有效操作数(
这两个操作数的算术类型均为 这两个操作数都是指向兼容类型的合格或不合格版本的指针; 一个操作数是指向对象或不完整类型的指针,另一个是指向对象的指针。
无效的合格或不合格版本;或 一个操作数是一个指针,另一个是空指针常量。
(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