发现好多函数都没有用过,最近由于实验室的项目问题在看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 不是空指针吗?自己试一下,这样可以,空指针可以读,没问题,但是如果进行写操作就可能有问题了。