结构体偏移量函数offsetof

本文介绍了计算结构体成员变量偏移量的多种方法,并详细解释了如何通过使用宏定义来实现这一目的。通过不同的编译器示例,读者可以了解到在C语言中如何巧妙地利用0地址指针获取成员变量相对于结构体起始位置的偏移。

计算结构体偏移量的函数多描述如下:


#define offsetof(s,m) (size_t)&(((s *)0)->m)

// Microsoft x86 compiler (version 7)
#define offsetof(s,m) (size_t)(unsigned long)&(((s *)0)->m)

// Diab Coldfire compiler
#define offsetof(s,memb) ((size_t)((char *)&((s *)0)->memb-(char *)0))


在这里让人迷惑的主要就是0这个数字,其实在这里就是一个编程技巧,将0地址映射成结构体s类型,我们并不会修改这一区域,仅用来取偏移量。如果从0地址开始的结构体,那么m的地址就是成员m的偏移量。

这些用法多数出自C语言,要想用明白一种语言,还需要练习呀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值