如何计算嵌套结构体成员的地址偏移

[复制链接]
 楼主| 发表于 2014-12-14 23:04 | 显示全部楼层 |阅读模式
最近遇到一个问题,不知道如何解决,发上来请大牛们指导:知道struct A{ struct B; struct C;
struct D}; struct B{...};struct C{...};struct D{..int m...};,请问如何编写C语言程序计算成员变量m相对于结构体A的偏移地址,对于嵌套更多的情况如何考虑?

期待大神指导
发表于 2014-12-15 10:29 | 显示全部楼层
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);   分析:  (TYPE *)0,将 0 强制转换为 TYPE 型指针,记 p = (TYPE *)0,p是指向TYPE的指针,它的值是0。那么 p->MEMBER 就是 MEMBER 这个元素了,而&(p->MEMBER)就是MENBER的地址,而基地址为0,这样就巧妙的转化为了TYPE中的偏移量。再把结果强制转换为size_t型的就OK了,size_t其实也就是int。  typedef __kernel_size_t  size_t; typedef unsigned int __kernel_size_t;   可见,该宏的作用就是求出MEMBER在TYPE中的偏移量。


很明确了,不做过多解释了。
发表于 2014-12-15 14:27 | 显示全部楼层
本帖最后由 cooldog123pp 于 2025-5-21 15:07 编辑

mark
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

14

帖子

0

粉丝
快速回复 返回顶部 返回列表