存档

文章标签 ‘偏移’

c中出现的offsetof宏和container_of宏 解析

2015年12月27日 607 人阅读 没有评论
1、offsetof宏用于求成员变量在结构体中的偏移量
#define offsetof(TYPE,MEMBER) ((size_t)&((TYPE*)0)->MEMBER)
我们来逐步分解这个宏:
((TYPE*)0) 把地址值为0指针转换为TYPE指针
((TYPE*)0)->MEMBER 解指针应用,求起始地址为0的类型为TYPE的成员MEMBER
&((TYPE*)0)->MEMBER 求起始地址为0的类型为TYPE的成员MEMBER的地址
((size_t)&((TYPE*)0)->MEMBER) 把起始地址为0的类型为TYPE的成员MEMBER的地址值类型转换为size_t类型
综上我们可以看到一个很巧妙的地方,就是把值为0的地址转换为TYPE*指针,这样求得的MEMBER的地址就是成员MEMBER在TYPE中的偏移量。

阅读全文…

分类: c/c++, linux 标签: