社区
C语言
帖子详情
如何比较两结构体是否相等?
辉歌
2001-11-03 08:56:25
struct ElemType;
ElemType a,b,c;
....
...全文
3674
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)
结构体
变量的复制与
比较
在C语言中,直接
比较
两
个
结构体
变量
是否
相等
是不被支持的。也就是说,不能使用`==`或`!=`这样的关系运算符来
比较
两
个
结构体
变量。这是因为
结构体
变量通常包含多个成员,每个成员可能有不同的数据类型,而这些数据...
比较
两
个结构:
比较
两
个结构
是否
相等
-matlab开发
如果结构 A 和 B 相同,则 STRUCTCMP(A,B) 返回逻辑 1 (TRUE) 大小,包含相同的字段名称(区分大...字段名称
比较
区分大小写。 忽略字母大小写使用中的任何差异STRUCTCMP(A,B, 'IgnoreCase', 'on') STRUCTCMP(A,B, 'Re
map中字符串与
结构体
作key效率
比较
C++标准库为`std::string`提供了一个高效的
比较
函数,它通常是通过逐个字符
比较
直到找到不
相等
的字符或者到达字符串末尾来完成的。然而,由于字符串的动态性,每次插入或查找都需要进行内存管理和字符串拷贝,这可能...
如何使用类库中的
结构体
类库也可能提供了
结构体
的复制构造函数和赋值运算符,以支持深拷贝或浅拷贝,这取决于
结构体
是否
包含动态分配的资源。 总结一下,正确使用类库中的
结构体
需要理解其定义、如何实例化和初始化
结构体
,以及如何与类库...
第10章
结构体
和共用体-4对
结构体
的操作1
=`来
比较
两
个
结构体
是否
相等
,因为这将
比较
它们的内存地址,而不是内容。如果要
比较
结构体
内容,必须逐个成员进行
比较
。 最后,
结构体
可以用来封装数组,如`ARRAY`
结构体
的例子所示,这样可以方便地复制整个数组。...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章