计算结构体偏移量

如果能够让(unsigned long)(&(type))的值为0,即&(type) == 0的时候,那么offset的值就是简单的:

offset = (unsigned long)(&(type.c));

如果说&(type) == 0,那么type.c就可以等价于((Type_t *)0)->c

但是这个语句是不能单独存在的,因为对NULL指针访问成员c是非法的。

可以通过在该语句之前加上&符号,即获取成员c的地址就没问题了。因此,对应的宏如下:

#define OFFSET(TYPE, MEMBER) ((unsigned long)(&(((TYPE *)0)->MEMBER)))

 

参考:

https://blog.csdn.net/encourage2011/article/details/52463857

posted @ 2018-11-01 11:08  小时候挺菜  阅读(592)  评论(0)    收藏  举报