Blogn - 记录个人历史 Ver 3.0.0
http://www.bloggern.com
首页  留言本  注册  用户名: 密码:  
如何获得一个结构体成员的偏移量
作者:左轻侯   583字节   点击:27103   回复:1545   所属分类:技术随笔
创建时间:2009-09-27 22:39:25   最后修改时间:2009-09-27 22:46:18  
前几天,在developerworks上偶然看到一篇文章:
http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/
看了个开头,觉得这个实现思路有点奇怪,如果链表结构不包含数据,而是让数据包含链表结构,那么怎么通过指向链表结构的指针,获得包含它的数据的地址呢?
看下来,果然发现了答案,其实很简单:

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

把0强制转换成指向数据类型的指针,再把它的成员的地址强制转换成数字,就得到了成员在结构体中的偏移量。
有一点点too smart,有一点点hack,但这是linux内核的基础数据结构。
今天突然又发现,这种实现思路,貌似还是其它很多软件的基础。
附件:
评论:
来自: 221.221.165.*   字节:11  ID:15635  发贴时间:2009-12-11 18:37:42  原贴 
不错 不错。  

本文允许匿名评论

发表评论:(最长不得超过128KB)
验证码:


您不能对本文发表评论。