我想判断两个 struct 指针是否指向相同的值,但我得到了这个错误:

./07ex.c:158:15:错误:二进制表达式(‘rgb’(也称为‘struct rgb_’)和‘rgb’)的操作数无效 返回*x==*y; 下面是 struct 和函数:

typedef struct RGB_ {
    float r; 
    float g; 
    float b; 
} RGB;

bool point_to_equal_values_struct(RGB *x, RGB *y) {
    return *x == *y;
}

我是通过这样做才度过难关的:

bool point_to_equal_values_struct(RGB *x, RGB *y) {
    if ((*x).r == (*y).r && (*x).g == (*y).g && (*x).b == (*y).b)
    {
        return true;
    }       
    return false;
}

但我仍然很好奇,为什么编译器会给出这个错误. 提前谢谢!

推荐答案

==运算符没有定义为在 struct 上工作,因此不能直接比较两个 struct .

您需要像您一样比较相应的字段.在边 node 上,您可能希望使用->运算符来访问指针引用的 struct 的成员,因为它更易于阅读:

if (x->r == y->r && x->g == y->g && x->b == y->b)

C++相关问答推荐

函数指针始终为零,但在解除引用和调用时有效

__VA_OPT__(,)是否可以检测后面没有任何内容的尾随逗号?

为什么在4.9.37版的内核中,kfio还需要smp_wmb呢?

如何在C中使printf不刷新标准输出?

使用sscanf获取零个或多个长度的字符串

我的C函数起作用了,但我不确定为什么

强制转换变量以在 struct 中蚕食

关于scanf()和空格的问题

递归打印二维数组(C编程)

链接器脚本和C程序使用相同的头文件,这可能吗?

我可以创建适用于不同endian的 colored颜色 struct 吗?

GetText不适用于包含国际字符的帐户名称

C:面筋蛋白';为什么不刷新窗口?

计算时出现奇怪的计算错误;N Select K;在C中

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

这些表达式是否涉及 C 中定义的复合文字?

如何转义包含指令中的字符?

OpenGL 中的非渐变 colored颜色 变化

返回指向函数内声明的复合文字的指针是否安全,还是应该使用 malloc?

将帧从相机 (/dev/video0) 复制到帧缓冲区 (/dev/fb0) 会产生意外结果