如何比较两结构体是否相等?

辉歌 2001-11-03 08:56:25
struct ElemType;

ElemType a,b,c;
....

...全文
3674 23 打赏 收藏 转发到动态 举报
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)

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧