打印

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

[复制链接]
1108|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ashuiamstrong|  楼主 | 2014-12-14 23:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近遇到一个问题,不知道如何解决,发上来请大牛们指导:知道struct A{ struct B; struct C;
struct D}; struct B{...};struct C{...};struct D{..int m...};,请问如何编写C语言程序计算成员变量m相对于结构体A的偏移地址,对于嵌套更多的情况如何考虑?

期待大神指导

相关帖子

沙发
keer_zu| | 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中的偏移量。


很明确了,不做过多解释了。

使用特权

评论回复
板凳
hnkf118| | 2014-12-15 14:27 | 只看该作者
make

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

14

帖子

0

粉丝