大佬们都在用的结构体进阶小技巧!

来源:面包芯语

2023-07-07 12:36:14

一、奇妙的“结构体”


(资料图片)

解析一下:上面是一个非常简单的代码,其中第一种结构体的初始化是linux源码中非常常见的一种方式,这种初始化的方式编译器必须要遵循ISO C99标准,否则只能使用第二种比较常规的方式。

3、0地址与结构体的妙用

这一块的内容算是这篇文章的重点内容,各位小伙伴们要做好笔记了,作者一直非常强调一点的是多读读大佬们的代码,并且善于总结一些常用的小技巧供大家平时使用。这不,我们今天就拿Linux的kernal中的两个宏定义来分享几个结构体小技巧:

解析一下:第一个宏定义的功能是获得一个结构体成员距离结构体首地址的偏移量,参数TYPE : 结构体类型;参数MEMBER : 结构体成员,其实这个算是比较简单的,把0地址强制类型转化为结构体类型指针,然后通过结构体指向成员即可获得结构体成员变量,然后通过&进行取地址便获得了结构体成员地址,成员的偏移 = (结构体成员地址 - 结构体首地址);然而结构体首地址为0,这样成员的偏移 = 结构体成员地址,应该足够清楚了吧。

第二个宏定义的功能是通过结构体成员变量获得对应的结构体首地址(也就是结构体地址),参数ptr :结构体成员变量地址;参数type : 结构体类型;参数member :结构体成员,这个宏定义可能对于一些小伙伴而言在写法上有一点点难度,不过其主要分为两个部分:

第一部分通过typeof获得成员的类型并定义了一个const指针,定义为const的目的是不让用户对0地址的内容进行写操作,对于大部分芯片对不合法区域进行读写会引起异常;第二部分通过使用offsetof宏定义获得结构体成员相对结构体首地址的偏移,这样一相减便获得了当前结构体成员所属结构体的地址,原理公式:(结构体地址 = 结构体成员地址 - 结构体成员的偏移)。

这里大体说一下注意事项:在第二点我们谈到了typeof关键字,该关键字是GUN C标准中扩展的关键字,所以在使用该宏定义的时候需要注意一下;不然,采用其他标准进行编译可能会报错。

4、最后帮助大家理解的小程序

作者要说的全在代码里面了:

程序运行的结果如下:

关键词:

大佬们都在用的结构体进阶小技巧!

一、奇妙的“结构体”今天讲解这块内容,主要是受上篇文章结构体内部对[详细]
2023-07-07

又一24GB内存顶级旗舰:真我GT Neo6详细参数出炉!

据数码闲聊站披露,真我GTNeo6系列即将发布。这款手机采用6 7英寸OLED[详细]
2023-07-07

烟台打捞局成功打捞万吨级油轮 有效化解海洋环境污染风险

人民网北京7月7日电(记者王连香)据交通运输部消息,7月2日15时16分许[详细]
2023-07-07

博鳌东屿岛国家级旅游度假区正式授牌

本报博鳌7月6日电(记者陈子仪)7月6日,博鳌东屿岛国家级旅游度假区授牌[详细]
2023-07-07

「基金E课堂」|漫话资产配置③ 股票+债券 资产配置“好搭档”

资产配置到底该怎么做?具体来说就是要解决“配什么”和“配多少”的问[详细]
2023-07-07

5连板浙江世宝低开2.95%,控股股东减持公司600万股A股股票

金融界7月7日消息浙江世宝低开2 95%,此前5连板,公司披露异常波动公告[详细]
2023-07-07

朗科科技7月7日盘中跌幅达5%

以下是朗科科技在北京时间7月7日09:58分盘口异动快照:7月7日,朗科科[详细]
2023-07-07

轻薄本上RTX独显靠谱吗?实际测试140W的RTX 4070性能表现

近段时间我们测试了很多款搭载RTX40系显卡的游戏本,最近有很多网友问[详细]
2023-07-07

节气里的中国智慧丨今日小暑,人们在新米与新酒中祈得丰登,迎接入伏!

“倏忽温风至,因循小暑来”2023年7月7日伴着声声蝉鸣夏季的第五个节气[详细]
2023-07-07

猎罪图鉴多少集(猎罪图鉴最后一幕什么意思)

导读1、主要是为了第2季的筹备与播出做一个简单的铺垫,留下一定的悬念[详细]
2023-07-07
版权所有: 现在制冷网 All Rights Reserved
粤ICP备18023326号-5
联系邮箱:855 729 8@qq.com