社区
C语言
帖子详情
如何比较两结构体是否相等?
辉歌
2001-11-03 08:56:25
struct ElemType;
ElemType a,b,c;
....
...全文
3761
23
打赏
收藏
如何比较两结构体是否相等?
struct ElemType; ElemType a,b,c; ....
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
new_cooperator
2001-11-11
打赏
举报
回复
同意cber观点,
正的不行就只有依此比较其各个元素了。
San_Daniel
2001-11-11
打赏
举报
回复
1
可以用#pragma pack(1)压抑对齐,用memcmp比较,比重载方便,但寻址会比较慢
liushmh
2001-11-11
打赏
举报
回复
最好是给你的 结构体设置 ID 号
richielee
2001-11-05
打赏
举报
回复
"否则就是按位比较了"
又有一个人说'按位比较'了,看样子还不只是我有这样的误解
实际上对于结构体,C++的'='的确有默认的行为,就是'按位拷贝'
但是'=='没有'按位比较'这样的默认行为,只有自己重载==运算符
cber
2001-11-05
打赏
举报
回复
最好自己重载operator==,否则就是按位比较了(对于有成员指针的结构可能会得到不正确的结果)。
耙子
2001-11-05
打赏
举报
回复
memcmp(&a,&b,sizeof(ElemType); 的确可能有问题,就是上面说的对齐问题,变量间会有多余的废字节,他的内容是随机的。比较可能影响结果。
建议初始化a,b的时候,memset(&a, 0, sizeof(ElemType))一下。
辉歌
2001-11-05
打赏
举报
回复
不会吧?我太失望了。难道是我太懒了吗?
richielee
2001-11-04
打赏
举报
回复
那就没有办法了,我认为你只有比较成员了
辉歌
2001-11-04
打赏
举报
回复
比较a和b的结构成员太复杂了.
richielee
2001-11-04
打赏
举报
回复
为什么不比较a和b的结构成员呢?
cnss
2001-11-04
打赏
举报
回复
不是说了么,除非你能保证STURCT中没有空隙,否则MEMCMP没用
辉歌
2001-11-04
打赏
举报
回复
#include<mem.h>
memcmp(&a,&b,sizeof(ElemType);
编译通过,运行错误.
比较变量a,b的内容是否相等,要怎么做啊?
gigix
2001-11-03
打赏
举报
回复
可以呀,这就是所谓的“内容比较”,即比较两个结构体内“第一层内容”是否相等。如果你想重载operator==,你必须考虑自己的业务逻辑。我一下说不清楚,看看Effective C++吧。
辉歌
2001-11-03
打赏
举报
回复
感谢你的回复,只是我不清楚你要表达什么意思。
我用的是以下方法:
#include<mem.h>
memcmp(&a,&b,sizeof(ElemType);
gigix
2001-11-03
打赏
举报
回复
如果你是用C,那么a==b的比较是指针地址的比较。
如果你用C++而没有重载operator==,同上。
如果你用C++而重载了operator==……你希望它怎样它就怎样。
richielee
2001-11-03
打赏
举报
回复
hehe,你肯定是java的程序编多了,把a和b当'句柄'看了
gigix
2001-11-03
打赏
举报
回复
在C里面a==b有错误?真的吗?——我自己很久没有写C程序,再加上最近是C++和JAVA同时进行,有点乱——难道a==b不是两个地址直接比较吗?难道结构体名不是指针吗?
……
你说得没错!我刚才试过了。必须显式重载operator==才能进行这样的比较。
richielee
2001-11-03
打赏
举报
回复
我错了,在C里面,a==b有语义错误,HOHO,编译不通过
richielee
2001-11-03
打赏
举报
回复
和gigix讨论
a==b 在C里面应该是按字节比较其内容吧?应该不是比较&a和&b
heimeng
2001-11-03
打赏
举报
回复
..
加载更多回复(3)
SuperGCD(luogu 2152)
本文介绍了一种使用高精度计算求解
两
个巨大数最大公约数(GCD)的方法。通过定义BigInt
结构体
,实现了大数的加减乘除及
比较
运算。在算法中,首先检查
两
个数
是否
为偶数进行除2操作,然后通过循环直至
两
数
相等
,最终得到GCD。此方法适用于数据范围在0<A,B≤10^10000的情况。
教你准确判断
两
个
结构体
是否
相等
本文探讨如何通过重载'=='运算符正确
比较
C/C++中的
结构体
,避免使用memcmp导致的字节对齐问题,并区分友元运算符和成员运算符重载。同时指出
结构体
内存初始化的重要性。
比较
两
个
结构体
是否
相等
本文探讨了使用memcmp函数
比较
结构体
的局限性,由于
结构体
内存对齐导致的字节填充使得直接
比较
不可行。介绍了通过重载==运算符来正确
比较
两
个
结构体
的方法。
如何
比较
golang中的
结构体
是否
相等
本文探讨了Go语言中
结构体
的值
比较
与指针
比较
,以及不同类型之间的转换。强调了简单类型如整型、浮点型、字符串等可以直接使用`==`进行
比较
,而复杂类型如Slice、Map等则不能直接
比较
。同时,展示了如何在
结构体
之间进行转换,并通过示例代码说明了转换后的
结构体
可以使用`==`进行值
比较
。文章还提及了
结构体
中包含不可
比较
类型的限制及其在实际编程中的应用。
Go 中
比较
结构体
、切片和映射
是否
相等
的方式详解
本文详细介绍了Go语言中
比较
结构体
、切片和映射
是否
相等
的方式。
结构体
在所有字段可
比较
时可用运算符
比较
;切片和映射不能直接用运算符
比较
内容,分别介绍了通用和高效的
比较
方法。还推荐了Go 1.21+的包进行
比较
,具有类型安全、高性能等优点。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章