【学习笔记】【内核】offsetof 的用法
offsetof 的作用就是获取结构体成员在结构体中的偏移量
#include <stdio.h>
//#include "stddef.h"
struct person {
char *name;
char job[13];
int age;
int height;
int weight;
};
#define myoffsetof(type,member) ((long unsigned int)&(((type*)0)->member))
int main()
{
printf("%ld\n", myoffsetof(struct person, name));
printf("%ld\n", myoffsetof(struct person, job));
printf("%ld\n", myoffsetof(struct person, age));
printf("%ld\n", myoffsetof(struct person, height));
printf("%ld\n", myoffsetof(struct person, weight));
return 0;
}
offsetof 是定义在 stddef.h 中,原型:
#define offsetof(type,member) ((long unsigned int)&(((type*)0)->member))
1,定义一个常量0
2,把这个常量强转成结构体指针类型,就可以访问后面的空间(type*)0。
3,是这个结构体指针指向这个参数((type*)0)->member。
4,取这个结构体变量的地址&(((type*)0)->member)。
5,强制类型转换(int)&(((type*)0)->member)