🚗库函数原型
需要引用头文件:#include<stddef.h>
- 第一个参数:结构体类型
- 第二个参数:结构体成员名字
作用:求结构体成员相对于起始位置的偏移量
🚓实例:
#include<stddef.h> struct S { char c; short s; int i; }; int main() { printf("%u\n", offsetof(struct S, c));//0 printf("%u\n", offsetof(struct S, s));//2 printf("%u\n", offsetof(struct S, i));//4 return 0; }
🚕模拟实现offsetof - 宏
🚅 图解
例子1:
代码讲解:
把0强转为结构体指针,向后可以访问一个结构体
认为后面存放了一个结构体变量
🚂代码
#include<stddef.h> #define OFFSETOF(struct_type,mem_name) \ (size_t)(&((struct_type*)0)->mem_name) struct S { char c; short s; int i; }; int main() { printf("%u\n", offsetof(struct S, c));//0 printf("%u\n", offsetof(struct S, s));//2 printf("%u\n", offsetof(struct S, i));//4 printf("%u\n", OFFSETOF(struct S, c));//(size_t)(&((struct S*)0)->c) ->0 printf("%u\n", OFFSETOF(struct S, s));//(size_t)(&((struct S*)0)->s) ->2 printf("%u\n", OFFSETOF(struct S, i));//(size_t)(&((struct S*)0)->i) ->4 return 0; }