社区
C语言
帖子详情
如何比较两结构体是否相等?
辉歌
2001-11-03 08:56:25
struct ElemType;
ElemType a,b,c;
....
...全文
3684
23
打赏
收藏
如何比较两结构体是否相等?
struct ElemType; ElemType a,b,c; ....
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
结构体
变量的复制与
比较
本文是关于
结构体
变量的复制与
比较
。
比较
两
个结构:
比较
两
个结构
是否
相等
-matlab开发
如果结构 A 和 B 相同,则 STRUCTCMP(A,B) 返回逻辑 1 (TRUE) 大小,包含相同的字段名称(区分大小写),相同的字段排序和相同的值; 否则为逻辑 0 (FALSE)。 如果定义了 A 并且您设置了 B = A,则 STRUCTCMP(A,B) 不一定是真的。 如果 A 或 B 的字段包含 NaN(非数字)元素,则 STRUCTCMP 返回false 因为 NaN 根据定义彼此不
相等
。 认为 NaN 值
相等
使用 STRUCTCMP(A,B, 'EqualNans', 'on') 创建每个结构的字段的顺序很重要。 忽略该字段使用STRUCTCMP(A,B,'IgnoreSorting','on')进行排序 字段名称
比较
区分大小写。 忽略字母大小写使用中的任何差异STRUCTCMP(A,B, 'IgnoreCase', 'on') STRUCTCMP(A,B, 'Re
map中字符串与
结构体
作key效率
比较
比较
两
者查找效率,得出结论是
结构体
比字符串组合快~~~
如何使用类库中的
结构体
对类库中的
结构体
的使用做了简单的示例,附有源码,供参考
第10章
结构体
和共用体-4对
结构体
的操作1
第10章
结构体
和共用体——对
结构体
的操作C语言程序设计第10章
结构体
和共用体如何访问
结构体
的成员?访问数组的元素– 通过下标(位置)选择数组元素访问
结构体
变
C语言
70,023
社区成员
243,253
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章