计算结构体成员的偏移量的宏

ivankevin posted @ 2010年10月15日 22:37 in 未分类 with tags cpp_primer 偏移量 宏 , 3154 阅读
/*我实质上是一个很懒的人。*/

有这么一个宏

#define MY_DEFINE(structure, member) ((int) & ((structure *) 0 -> member))

因为是某笔试的选择题,我又不知道选项,所以纠结了很久。

后来知道了“偏移量”的概念,从而也明白了这是一个计算结构体成员的偏移量的宏。

 

首先

(structure *) 0 

是一个structrure类型的指针,但不指向任何对象;对其成员的赋值和访问都是非法的。

但是,我们却可以对这个指针进行取地址操作,对其成员也是一样的。

因此,

((int) & ((structure *) 0 -> member))

返回的就是空指针的成员的地址。

而由偏移量的定义我们知道p.member的偏移量可以用 &p.member - &p来计算,而

& ((structure *) 0 

的值自然是0.

所以这个宏自然就是用来计算结构体成员的偏移量的:)

/*所以我愿意思考更多,以达到事半功倍的效果。*/
Avatar_small
依云 说:
2010年10月16日 01:24

刚刚看到还有这么个宏 http://en.wikipedia.org/wiki/Offsetof


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter