结构体大小的获取 :
我们使用sizeof()函数来获取结构体的大小#includestruct test1{ int a; // 0 1 2 3 char b; // 4 float c; // 8 9 10 11};struct test2{ int a; // 0 1 2 3 char b; // 4 char d; // 5 char e; // 6 float c; // 8 9 10 11};int main(){ struct test1 t1; struct test2 t2; int s1=sizeof(t1); int s2=sizeof(t2); printf(s1=%d,s2=%d,s1,s2); return 0;}输出结果:
s1=12,s2=12从上面的例子我们可以看到,t1,t2
两个结构体的内部的成员变量构成明明不一样,但是最终结构体的大小却是相同的,都是12字节。这就是因为结构体内存对齐的原因,使得构成并不相同的两个结构体在大小上却是相同的。其中t2中成员变量d,e占据的内存,是在结构体内存对齐后补齐的空位,因此结构体整体的大小并没有增加。正是因为结构体存在内存对齐,所以无法对结构体进行比较高效的直接比较,也就是无法对两个结构体整体进行比较。那么为了比较结构体,我们就想到了对结构体内部成员变量的比较。结构体的比较
既然要对结构体的成员变量进行比较,那么我们就要先能够获取成员变量。
// 获取方法变量名.成员变量名// 对于t1,我们如果想要获取t1的内部成员变量a,那么我们就可以这样写:t1.a#includestruct test1{ int a; char b; float c; };// 那么当我们判断两个test1类型的结构体t1,t2是否相等时,就可以这么写int isequal(test1 x,test1 y){ if(x.a==y.a && x.b==y.b && x.c==y.c) { return 1; // 相等返回 1 } else return 0; // 不相等返回 0 } int main(){ struct test1 t1={1,'a',2.1}; // 声明两个test1类型的结构体变量 struct test1 t2={1,'a',2.1}; int r=isequal(t1,t2); // 调用函数进行比较 printf(%d,r); return 0;}输出结果:
1
四年落地七千+客户,五大银行争相投资,第四范式做对了什么?
如何提高滤波器对差模噪声的抑制能力
5G时代下无线网络也迎来了更高的WiFi标准
中国在量子模拟芯片领域取得新突破
超低功耗家族再添新成员,武汉芯源半导体发布32位M0+内核MCU CW32L052系列产品
结构体大小的获取
噪声扬尘在线监测仪在施工现场的作用有多大?
电装和NTT DATA验证新的移动体验服务
人工智能和机器学习如何推动RegTech创新
豪威科技推出一款新型图像传感器OV08B支持自拍摄影和多摄像头应用
锐思智芯荣获汽车电子产业联盟“明日之星”奖项
codeblocks简单的加减法编程
Linner聆耳NC25主动降噪体验 到底好不好用
华为折叠屏将采用京东方供应的OLED屏幕
SUSE已经完成与投资公司EQT之间的交易,成为业界最大的独立开源公司
2020年11月我国HEV乘用车销量合计约为4.4万辆,同比增长54%
关于芯片量产工程师需要掌握的知识概览
如何利用树莓派zero实现AirPlay扬声器的设计
曝E3 2020已决定取消 或采取线上直播形式
AT32讲堂046 | 雅特力AT32 MCU USB设备库的架构和使用方法