注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小白的博客

嵌入式爱好者

 
 
 

日志

 
 

container_of分析  

2012-09-19 01:13:05|  分类: 韦东山视频第二轮 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) * __mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); })

作用:
根据指向结构体某个成员的指针,获得指向整个结构体的指针!

参数:
ptr:指向某个成员的指针
type:结构体的类型
member:成员名

分析:
1、typeof用于根据变量获得变量的类型,c库实现
typeof(((type *)0)->member):
将0转化为type类型的指针,并获得成员member的类型,我们假设为type1类型
2、const typeof(((type *)0)->member) * __mptr:
定义一个type1类型的指针变量__mptr,它指向ptr
3、offsetof(type, member):
获得成员member在结构体中的偏移量
4、(char *)__mptr - offsetof(type, member):
__mptr 转化为字符指针,并减去偏移量,那么现在的地址就指向了结构体的的首部
5、(type *)((char *)__mptr - offsetof(type, member))
将字符指针转化为type类型的指针



  评论这张
 
阅读(404)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017