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

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

ElemType a,b,c;
....

...全文
1399 点赞 收藏 23
写回复
23 条回复
new_cooperator 2001年11月11日
同意cber观点,
正的不行就只有依此比较其各个元素了。
回复 点赞
San_Daniel 2001年11月11日
可以用#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日
..
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告