首页
社区
课程
招聘
[求助]一个宏
发表于: 2009-5-9 22:54 3443

[求助]一个宏

2009-5-9 22:54
3443
哪位仁兄解释一下
#define offsetof(s,m) (size_t)&(((s*)0)->m)这个宏是返回偏移量的,可我看不懂。
&(((s*)0)->m)返回的是0x0000000x之类的数字,反正x就是偏移量, (size_t)强制转换,可(((s*)0)->m)是怎么产生作用的呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 125
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
(s*)0             : 0地址的指针转换成结构体s的指针,
   ((s*)0)->m    : 指向结构体指针s的成员变量m
   &(((s*)0)->m) :  取s的成员变量m的地址
  (size_t) &(((s*)0)->m)   将m的地址转化成unsigned int 变量 ,即 size_t 型变量、
  

  提示:由于结构体的地址为0 ,所以m的地址即m地址相对于结构体地址的偏移量,当然0地址是不可以用,它紧紧是欺骗了编译器,获取了m的地址相对于结构体地址的偏移量。
2009-5-9 23:20
0
雪    币: 125
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不知道我的解释是不是够详细,,楼主理解了没 ,我语文不行,望见谅 !
2009-5-9 23:24
0
雪    币: 354
活跃值: (157)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
谢谢你!!这么大晚还回答。答复很详细。我调试下市这样的
2009-5-9 23:51
0
游客
登录 | 注册 方可回帖
返回
//