社区
C#
帖子详情
能否直接比较两个结构体
大狗狗
2009-01-09 09:37:42
如:struct A{...}
A a1,a2;
if(a1==a2)//看看两个结构体对象的所有成员值是否对应相等
{}
这样能不能比较?还是我需要逐一比较两个结构体中的每个成员?
...全文
2494
17
打赏
收藏
能否直接比较两个结构体
如:struct A{...} A a1,a2; if(a1==a2)//看看两个结构体对象的所有成员值是否对应相等 {} 这样能不能比较?还是我需要逐一比较两个结构体中的每个成员?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
大狗狗
2009-01-11
打赏
举报
回复
感谢所有人回贴!
wsf205
2009-01-09
打赏
举报
回复
哈哈,楼主的小经验很受用
lunat
2009-01-09
打赏
举报
回复
对结构体定义 StructLayout属性
对每一个成员定义FieldOffset属性
yhy0611
2009-01-09
打赏
举报
回复
[Quote=引用 3 楼 alan001 的回复:]
不能
要逐一比较,或者干脆进行内存块比较
[/Quote]
弱弱的问一句,怎么进行内存块比较啊?
大狗狗
2009-01-09
打赏
举报
回复
哈哈,这么多人回贴,感谢大家的关照!
小弟已有所感悟:
不能直接比较,试想你的结构体比较复杂,其中包含了字符数组---C#可不知道如何比较两个字符数组的内容。因为它根本就不知道你住字符数组中实际写了多少个字符。实际上我要是在结构体中放了字符数组,同时还要放个变量记录数组中字符个数。这样才能在使用时转换为需要的string.
重载 == ?C# 主张语法从简,重载运算符这个麻烦的东西就不要用了。
我的解决办法是:在结构体中添加一个 public bool Equal(struct obj)成员函数。其参数就是同类结构体对象。
将this成员与参数对象的成员逐一比较(或按个人需要比较),返回true或false
嘿嘿--就这么干了
最后分享个小经验:本人这所以用结构体是因为认为其对象位于栈中要比放在堆中的类对象速度快,但后来发现由于结构体是值类型,使用中涉及到了装箱拆箱操作,而装箱拆箱过程中发现无法更改结构体成员,网上找资料说是什么云云。。总之是装箱拆箱造成的。
最后小弟把结构体改成类了--很简单:struct改成class即可
看来-- 使用结构体要谨慎啊
tiger999
2009-01-09
打赏
举报
回复
用 Equals 就是字段与字段的比较。
不过有限制, 结构体内的字段不能是引用类型
如果字段是引用类型,那么引用类型字段的比较是用 Object.ReferenceEquals 实现的。 出来的可能不是你想要的。
再见品月
2009-01-09
打赏
举报
回复
把结构体内的每个成员一一对应着用equals比较有问题吗?
结构体内存的是什么我不能用equals比较了?int,string。。不能用么?
难道里面还存着个结构体。。搞笑
再见品月
2009-01-09
打赏
举报
回复
虚心学习。。呵呵。。接受大佬批评。。。回家了试验下。。
qimini
2009-01-09
打赏
举报
回复
比较默认就可以比较,但是比较出来的结果可能不是你想要的
如果需要比较,那么请重载操作符,同样对于其他自定义托管对象类型也适用
vrhero
2009-01-09
打赏
举报
回复
[Quote=引用 7 楼 luckyp 的回复:]
不能。。。结构体可以理解成两个对象
还是比较复杂的对象。。
所以没法直接比较。。不过可以拆了比较。。看里面的所有成员是否相等。。。
[/Quote]
乱讲...你用Equals试试,实现==号也不是难事...
再见品月
2009-01-09
打赏
举报
回复
不能。。。结构体可以理解成两个对象
还是比较复杂的对象。。
所以没法直接比较。。不过可以拆了比较。。看里面的所有成员是否相等。。。
vrhero
2009-01-09
打赏
举报
回复
呵呵...我也错了,只能用Equals...自定义的struct ==号要自己实现...
lunat
2009-01-09
打赏
举报
回复
不好意思 我错了....
这个是不能直接进行==运算的...除非你自己定义运算符...
检讨一下,想当然了 .... 555
sunrobust
2009-01-09
打赏
举报
回复
可以, 2楼说的很对.
alan001
2009-01-09
打赏
举报
回复
不能
要逐一比较,或者干脆进行内存块比较
vrhero
2009-01-09
打赏
举报
回复
struct是值类型,比较的就是值...但是要注意结构成员不能是引用类型,string除外...
lunat
2009-01-09
打赏
举报
回复
可以 就是你理解的那样 "两个结构体对象的所有成员值是否对应相等"
《C语言基础》 之 第10章
结构体
课程内容:为什么需要
结构体
、定义一个
结构体
类型、
结构体
变量的声明和定义、sizeof测试
结构体
变量字节、
结构体
成员的普通访问方式、使用指针访问
结构体
成员、
结构体
嵌套、
结构体
传参、
结构体
数组。
比较
两个
结构体
是否相等
首先,是否可以使用memcmp来
比较
两个
结构体
是否相等呢? 答案是不可以的。memcmp函数是逐个字节进行
比较
的,而struct存在字节对齐,字节对齐时补的字节内容是随机的,会产生垃圾值,所以无法
比较
。
结构体
内存对齐的概念
结构体
变量中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从
结构体
存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因...
教你准确判断
两个
结构体
是否相等
文章目录系列文章目录前言一、判断
两个
结构体
是否相等 前言 一、判断
两个
结构体
是否相等 判断
两个
结构体
是否相等:重载操作符"=="。 不能用函数memcpy来判断
两个
结构体
是否相等:memcmp函数是逐个字节进行
比较
的,而struct存在字节对齐,字节对齐时补的字节内容是随机的,会产生垃圾值,所以无法
比较
。
【C++】memcpy能
比较
结构体
吗?
比较
两个
结构体
时, 若
结构体
中含有大量的成员变量, 为了方便, 程序员往往会
直接
使用memcmp对这
两个
结构体
进行
比较
, 以避免对每个成员进行分别
比较
。 这样的代码写起来
比较
简单, 然而却很可能深藏隐患。 请看下面的示例代码: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct padding_type { short m1; int m2; }padding_type_t
判断
两个
结构体
是否相等
一、判断
两个
结构体
是否相等 判断
两个
结构体
是否相等:重载操作符"==" 不能用函数memcpy来判断
两个
结构体
是否相等:memcmp函数是逐个字节进行
比较
的,而struct存在字节对齐,字节对齐时补的字节内容是随机的,会产生垃圾值,所以无法
比较
。 #include<iostream> using namespace std; struct s { int a;...
C#
110,537
社区成员
642,576
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章