社区
C#
帖子详情
能否直接比较两个结构体
大狗狗
2009-01-09 09:37:42
如:struct A{...}
A a1,a2;
if(a1==a2)//看看两个结构体对象的所有成员值是否对应相等
{}
这样能不能比较?还是我需要逐一比较两个结构体中的每个成员?
...全文
2711
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
打赏
举报
回复
可以 就是你理解的那样 "两个结构体对象的所有成员值是否对应相等"
比较
两个
结构体
是否相等
首先,是否可以使用memcmp来
比较
两个
结构体
是否相等呢? 答案是不可以的。memcmp函数是逐个字节进行
比较
的,而struct存在字节对齐,字节对齐时补的字节内容是随机的,会产生垃圾值,所以无法
比较
。
结构体
内存对齐的概念
结构体
变量中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从
结构体
存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因...
面试题:
两个
相同struct的变量能否用memcmp
比较
?
面试的时候,考官问了RT的题目,觉得这题问得
比较
有水平,所以把它写出来分享。 大家知道,
结构体
里面的变量,如果有的是char型,有的是int型,有的是long型,有的是short型,也有的是未分配的地址等等。 想看如下代码: #include #include #include typedef struct{ char a; int b; }
C语言
结构体
struct的
比较
两个
struct
结构体
进行
比较
, 首先不能
直接
比较
。 struct A a,b; a和b相比是错误的。 其次不能进行内存
比较
。 如下,程序运行的结果会如何? void DiffStructWithMultiVar() { struct A a = {0}; struct B b = {0}; //illegal compare if (memcmp(&a, &b, sizeof(struct A)) == 0) printf("a = b .
如何
比较
golang中的
结构体
是否相等
如果是相同的无复杂类型的
结构体
创建的对象 可以
直接
使用 == 对比值和指针 简单类型 可排序的数据类型 整型Integer 浮点型Floating-point 字符串String 可以
比较
的数据类型 除了上述三种外,还有 Boolean, Complex, Pointer, Channel, Interface Array 复杂类型 不可
比较
的数据类型 Slice Map Function 如下 type User struct { age int name string } func m.
结构体
变量之间的
比较
和赋值原理
结构体
变量之间的
比较
方法和赋值原理:
结构体
变量之间可以
直接
赋值我想大家都知道了。但
结构体
变量之间可以做
比较
吗?答案肯定是不行的,因为
比较
符号只作用于基本数据类型。如果是用C++或者Java来编程时遇到
结构体
变量之间的
比较
,那还好办
直接
对操作符重载就可以了。但如果是用C语言来编程遇到它呢?很多人说那可以自己写个函数啊,自己想怎么实现就怎么实现,况且写个
结构体
变量之间的
比较
程序又不是什么难事。但我想问的是你遇到的
结构体
里面的成员才多少个?如果是一个
结构体
中包含多个
结构体
(而
结构体
中又包含了
结构体
,比如ovs中的
C#
111,128
社区成员
642,536
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章