这个人很懒,什么都没有留下
分类: C/C++
2011-08-14 14:41:05
有这么一个宏
1 | #define MY_DEFINE(structure, member) ((int) & ((structure *) 0 -> member)) |
因为是某笔试的选择题,我又不知道选项,所以纠结了很久。
后来知道了“偏移量”的概念,从而也明白了这是一个计算结构体成员的偏移量的宏。
首先
1 | (structure *) 0 |
是一个structrure类型的指针,但不指向任何对象;对其成员的赋值和访问都是非法的。
但是,我们却可以对这个指针进行取地址操作,对其成员也是一样的。
因此,
1 | ((int) & ((structure *) 0 -> member)) 返回的就是空指针的成员的地址。 |
而由偏移量的定义我们知道p.member的偏移量可以用 &p.member - &p来计算,而
1 | & ((structure *) 0 的值自然是0. |
所以这个宏自然就是用来计算结构体成员的偏移量的:)