找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 186|回复: 0

用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量?

[复制链接]

210

主题

371

回帖

0

积分

管理员

积分
0
发表于 2013-10-25 23:15:41 | 显示全部楼层 |阅读模式
既然是求偏移量的话,那么可以考虑字节对齐就可以得到偏移量了。比如说 :
struct struc
{
int a;
char b[20];
}
那么根据字节对齐我们可知a的偏移量为0;b的偏移量为4。如果用宏定义怎么处理呢?
我么可以这样做:#define FIND(struc, e) (size_t)&(((struc*)0)->e) 它表示结构体struc中的e成员相对于结构体struc的偏移量。
分析如下:(struc*)0表示将常量0强制转化为struc*型指针所指向的地址;那么((struc*)0)->e表示该结构体的成员e,那么&(((struc*)0)->e)就是表示成员e的地址了,由于真个结构体是从地址0开始的,所以&(((struc*)0)->e)就表示e成员的相对于结构体struc的偏移量了。(size_t)是一种数据类型,为了便于系统之间的移植就将其定义无符号数据型数据,一般为unsigned int。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 04:38 , Processed in 0.065162 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表