offsetof

发现好多函数都没有用过,最近由于实验室的项目问题在看openflow 的源代码,里面有好多自己从来没用过的方法,学习了。今天看到了offset了,查了一下。

另外,学习c/c++的同学,推荐一个网站,可以查找函数以及类的用法。 http://www.cplusplus.com/

offsetof:  This macro with functional form returns the offset value in bytes of member member in the structure type type.


即成员在结构体中的偏移位置。


struct mystruct {
  char singlechar;
  char arraymember[10];
  char anotherchar;
};

则: offset(struct mystruct, singlechar)  结果是 0;

offset(struct mystruct, arraymember)  结果是 1;

offset(struct mystruct, anotherchar)  结果是 11;

那我们如何自己来实现offset呢?

其实就是成员变量和结构体地址之间的距离。面试宝典上的写法是:

#define offset(type, member)  (size_t)&((const type *)(0)->member)

可能会想 0 不是空指针吗?自己试一下,这样可以,空指针可以读,没问题,但是如果进行写操作就可能有问题了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值