系列文章目录


文章目录

  • 系列文章目录
  • 一、判断两个结构体是否相等

一、判断两个结构体是否相等

  • 判断两个结构体是否相等:重载操作符"=="。
  • 不能用函数memcpy来判断两个结构体是否相等:memcmp函数是逐个字节进行比较的,而struct存在字节对齐,字节对齐时补的字节内容是随机的,会产生垃圾值,所以无法比较。
#include<iostream>
using namespace std;struct s
{int a;int b;bool operator == (const s &rhs);
};bool s::operator == (const s &rhs)
{return ((a == rhs.a) && (b == rhs.b));
}int main()
{struct s s1, s2;s1.a = 1;s1.b = 2;s2.a = 1;s2.b = 2;if (s1 == s2)cout << "两个结构体相等" << endl;elsecout << "两个结构体不相等" << endl;return 0;
}

  • 判断两个结构体是否相等:重载比较操作符"=="

  • 类外定义的普通运算符重载函数:只能访问类中的公有数据成员,而不能访问类的私有数据成员;

  • 友元运算符重载函数:若友元运算符重载函数重载的是双目运算符,则参数表中有两个操作数;若重载的是单目运算符,则参数表中只有一个操作数。

  • 成员运算符重载函数:若成员运算符重载函数重载的是双目运算符,则参数表中只有一个操作数,另一个操作数为隐含的,是该类的当前对象,通过this指针隐式传递给函数;若重载的是单目运算符,则参数表为空。

运算符重载函数的参数一般采用引用类型,操作数至少有一个是自定义的数据类型。

#include<iostream>using namespace std;struct A
{char ch;int val;//  友元运算符重载函数friend bool operator==(const A &ob1, const A &ob2);//  成员运算符重载函数bool operator==(const A &rhs);
};bool operator==(const A  &ob1, const A &ob2)
{return (ob1.ch == ob2.ch && ob1.val == ob2.val);
}bool A::operator==(const A &rhs)
{return (ch == rhs.ch && val == rhs.val);
}int main()
{struct A s1, s2;s1.ch = 1;s1.val = 2;s2.ch = 1;s2.val = 2;if (s1 == s2)cout << "两个结构体相等" << endl;elsecout << "两个结构体不相等" << endl;return 0;
}


能用函数memcmp来判断两个结构体是否相等:memcmp函数是逐个字节进行比较的,而struct存在字节对齐,字节对齐时补的字节内容是随机的,会产生垃圾值,所以无法比较。

当我们使用memcmp比较两个结构体时,又不能保证对每个结构体都使用了memset进行清零操作,此时就会出现错误的结果。为了安全起见,在c语言中,可以自己写结构体比较函数;在c++中,结构体基本等同于类,重载==操作符,自己实现比较逻辑即可。当然,对于全局的结构体,以及静态变量,编译器会将结构体占用的内存初始化为0,等同于memset。

教你准确判断两个结构体是否相等相关推荐

  1. 判断两个结构体是否相等

    一.判断两个结构体是否相等 判断两个结构体是否相等:重载操作符"==" 不能用函数memcpy来判断两个结构体是否相等:memcmp函数是逐个字节进行比较的,而struct存在字节 ...

  2. 网络设备的两个结构体net_device和in_device

    网络设备初始化 函数alloc_netdev_mqs分配一个网络设备结构体net_device,in_device结构体由inetdev_init分配和初始化. struct net_device * ...

  3. 两个结构体ifconf和ifreq

    用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人 来说都是比较陌生的,这里给大家一种比较简单的理解方法,当然只一种帮助 理解的方法,在描述中可能会有一些地方与真 ...

  4. 比较两个结构体是否相等

    首先,是否可以使用memcmp来比较两个结构体是否相等呢? 答案是不可以的.memcmp函数是逐个字节进行比较的,而struct存在字节对齐,字节对齐时补的字节内容是随机的,会产生垃圾值,所以无法比较 ...

  5. 如何比较两个结构体是否相等

    今天定义了一个结构体来记录十一个球员的角色信息,后来在赋值,输出,比较时报错来,比如定义下面这样一个结构体, 有什么效率高的办法比较他们是否相等呢? struct Student { int age; ...

  6. 教你如何判断两个IP地址,是否在同一个网段

    目录 前言 一.什么是子网掩码? 二.如何根据掩码来确定ip地址网段 总结 前言 子网掩码的介绍以及如何根据掩码来确定IP地址网段. 一.什么是子网掩码? 子网掩码只有一个作用,就是将某个IP地址划分 ...

  7. matlab 比较两个结构体,用于比较 MATLAB 结构体数组的比较器 - MATLAB - MathWorks 中国...

    创建一个供交互测试的测试用例. import matlab.unittest.TestCase import matlab.unittest.constraints.IsEqualTo import ...

  8. 两个结构体变量可以直接赋值吗_Gox语言中的结构类型-GX6

    Gox语言中,结构类型(struct)其实并不是很常用,因为Gox语言本身就是动态类型的语言,一般的类似结构体的数据直接用数组或者映射类型就可以了,里面的数据项可以是任意类型,包括嵌套复合类型.因此, ...

  9. 用JAVA定义两个结构体_c语言struct结构体的定义和使用

    c语言由于不像java,c#,c++等语言有对象,所以就用struct结构体来表示,其实作用是差不多的,下面来快速学习c语言struct结构体的定义和使用,以学生类student来举例,有三种定义方式 ...

最新文章

  1. 相似图片检测:感知哈希算法之aHash,dHash,pHash的Python实现
  2. 如何用html5编写彩色同心圆,HTML5 canvas 同心圆动画
  3. android预览界面编译出错,Android O预览findViewById编译错误
  4. js简单判断身份证合法性以及身份证生日合法性
  5. 马云:捐钱很容易 但当所有人行动才能有变化
  6. android在xml中加载大图,android – 如何在布局xml中添加循环视图
  7. 程序员必知的 20 个 Python 技巧!
  8. 货币php是什么,php是什么【货币问答】- php是什么所有答案 - 联合货币
  9. 微信小程序前端【订阅消息】遇到的问题及总结
  10. 计算机数字公式表白,love密码数字表白 数字表白公式
  11. php货币2019年12月31日汇率,[外汇]2019年12月31日人民币汇率中间价新公告 今日美元兑人民币行情查询 - 南方财富网...
  12. Python random模块(获取随机数)常用方法和使用例子
  13. python 笛卡尔积 两个表_多个集合计算笛卡尔积-Python
  14. C语言 char 和 signed char的区别
  15. unity中使用AO贴图和自发光emission的简单应用
  16. 四、四相节拍脉冲发生器、带启停电路的时序电路(含电路图)
  17. php汉字转拼音 php 汉字取首字母
  18. 新冠疫情防控背后有哪些鲜为人知的技术?
  19. 使用node-red通过MQTT传送数据
  20. Linux配置本地yum源

热门文章

  1. Power PMAC运动控制器 —— 学习笔记6
  2. 【负载均衡集群——保姆式教学】
  3. 草根已死 | 互联网精英降维打击
  4. 什么?财务也要软件测试?
  5. 主板怎么安装在计算机主机箱,电脑主板和cpu如何搭配?牢记这几点!
  6. 《逆向工程》dll注入基础
  7. 大家好,我的博客开通了!专属我的工分分享开始了!
  8. 物联网 - 听说你设备更换物联卡后无法正常使用了?
  9. 常用 icon 素材网站
  10. 【最长的顺子】斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。