您的位置:首页 > 大数据 > 人工智能

31.offsetof宏与container_of宏

2016-04-04 16:54 513 查看
31.1.offsetof宏

(1)作用:用宏来计算结构体中某个元素和结构体首地址的偏移量(其本质是通过编译器来帮我们计算)。

(2)原理:我们虚拟1个type类型结构体变量,然后用type.member的方式来访问某个member元素,继而得到member相对于整个变量首地址的偏移量。

(3)学习思路:第1步先学会用offsetof宏;第2步再去理解这个宏的实现原理(见图1)。

31.2.container_of宏

(1)作用:知道某个结构体中某个元素的指针,反推整个结构体变量的指针,继而得到结构体中其它元素的指针。

(2)typeof关键字:typeof(a)即由变量a得到a的类型,typeof就是由变量名得到变量的数据类型。

(3)原理:先用typeof得到member元素的类型,然后通过该类型定义指向member元素的指针,然后用该指针减去该元素相对于整个结构体变量的偏移量(偏移量用offsetof宏得到)后得到整个结构体变量的首地址,再把该地址强制类型转换为type *即可。

(3)学习思路:第1步先学会用container_of宏;第2步再去理解这个宏的实现原理(见图2)。

31.3.学习指南和要求

(1)基本要求:必须要掌握这两个宏的使用,即知道这两个宏接收什么参数,返回什么值,会用这两个宏来写代码,看见代码中别人用这两个宏能理解什么意思。

(2)升级要求:能理解这两个宏的工作原理,能表述出来,有些面试笔试题会这么要求。

(3)高级要求:能自己写出这两个宏,不要着急,慢慢来。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: