Chinaunix首页 | 论坛 | 博客
  • 博客访问: 259981
  • 博文数量: 54
  • 博客积分: 2915
  • 博客等级: 少校
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-21 12:20
个人简介

这个人很懒,什么都没有留下

文章分类
文章存档

2013年(1)

2012年(6)

2011年(11)

2010年(16)

2009年(20)

我的朋友

分类: 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.

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

/*所以我愿意思考更多,以达到事半功倍的效果。*/
阅读(488) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~