• 2484阅读
  • 0回复

用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量? [复制链接]

上一主题 下一主题
离线那个谁
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2013-10-25
既然是求偏移量的话,那么可以考虑字节对齐就可以得到偏移量了。比如说 :
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。
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个