如何解释 #define FIND(struc, e) (size_t) &(((struc*) 0)->e)
2012-08-29 10:16
597 查看
用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量。
struct struc
{
int a;
char b[20];
double ccc;
};
则 struc student
FIND(student,a);//等于0
FIND(student,b);//等于4
答案:#define FIND(struc, e) (size_t) &(((struc*) 0)->e)
解释如下:
(struct *) 0
把一段地址看作struc,
((struc *) 0)->e
指向它的成员e
&(((struc*) 0)->e)
取这个成员的地址,因为该结构体的首地址为0,所以就得到成员e距离结构体首地址的偏移量。
(size_t) &(((struc*) 0)->e)
把地址硬转为size_t类型
struct struc
{
int a;
char b[20];
double ccc;
};
则 struc student
FIND(student,a);//等于0
FIND(student,b);//等于4
答案:#define FIND(struc, e) (size_t) &(((struc*) 0)->e)
解释如下:
(struct *) 0
把一段地址看作struc,
((struc *) 0)->e
指向它的成员e
&(((struc*) 0)->e)
取这个成员的地址,因为该结构体的首地址为0,所以就得到成员e距离结构体首地址的偏移量。
(size_t) &(((struc*) 0)->e)
把地址硬转为size_t类型
相关文章推荐
- #define OFFSET(struc, m) (size_t)(&(((struc*)0)->m))
- 如何解释 #define OFFSET(struct_type, member) ((size_t) &((struct_type *) 0)->member)
- #define FIND(struc,e) (size_t)&(((struc*)0)->e)
- map常用成员(关联容器)----创建map<主键,主键对应的值>,增insert,删erase,改查找find,然后修改second,遍历iterator,获取元素个数size,判空empty
- vector<int>::size_type 解释
- SetScrollSizes( nMapMode, GetDocument( )->GetMyDocSize( ) )中的MSDN解释
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- 如何使用jQuery去掉指定标签里所有文字内容对应的链接,即去掉<a>标签
- /dev/null 2>&1 解释
- Linux Shell >/dev/null 2>&1分析解释
- (size_t)&amp;(((s *)0)-&gt;m)的理解 .
- 如何切换SVN账号<留着备用>
- 2012-Linux->21(如何备份博客?)-续
- 如何查找带母版页的控件 Master.Master.FindControl("")
- $arr as $key=>$value解释
- OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow
- <转>如何在Mac OS X中开启VIM语法高亮
- linux I2C 驱动之----i2c驱动的注册过程(i2c_register_driver->driver_register(&driver->driver)->driver_find)
- hbase源码系列(十五)终结篇&Scan续集-->如何查询出来下一个KeyValue
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)