码迷,mamicode.com
首页 > 其他好文 > 详细

获取结构体成员偏移量

时间:2015-08-15 19:42:59      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

具体方法

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

实现解析

    (TYPE*)0是一个空指针,如果使用空指针访问成员肯定造成段错误,但是前面的”&”这个符号,表示我们仅仅取MEMBER字段的地址,而不是引用该字段内容,因此不会造成段错误。

    另外,结构体中的字段在内存中分配的地址是连续的,当我们去访问某个字段时,例如,&( ( (TYPE*)0 )->MEMBER ) ),会先取得该结构体类型TYPE的地址,然后再计算MEMBER字段的offset;最后,将TYPE的地址加上MEMBER的offset,得到MBMBER字段真正的地址,而这个动作是由编译器帮我们完成的。

    比如:使用&(ptr->member)获取member的地址,假设ptr地址为100,那么member的地址就是100+offset,如果ptr地址为0,那么得到的结果就是member在type中的offset。

获取结构体成员偏移量

标签:

原文地址:http://www.cnblogs.com/zhouLee/p/4732859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!