用一个宏求结构体某个变量的相对偏移量

转自:http://blog.163.com/zjf_to/blog/static/20142906120121884156104/


如:

stuct student 

    int a; 
    char b[20]; 
    double ccc; 

则: 
FIND(student,a); //等于0 
FIND(student,b);//等于4


答案:
#define FIND( struc, e ) (size_t)&(((struc*)0)- >e)

(struc*)0 //表示将常量0强制转化为struc *型指针所指向的地址,当然也可以x,只是到最后还要减去这个x的值 
((struc*)0)- >e 表示在0地址处的结构体struc的成员e  
&(((struc*)0)- >e)//表示取结构体指针(struc*)0的成员e的地址,因为该结构体的首地址为0,所以其实就是得到了成员e距离结构体首地址的偏移量. 
(size_t)//是一种数据类型,为了便于不同系统之间移植而定义的一种无符号型数据,一般为unsigned int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值