思路:
有个struct类型的指针指向第一个成员,该成员的地址从0开始,内存是以字节为单位,那么其它成员所在的地址就是相对于结构体开头的字节偏移量,
size_t 是一些C/C++标准在stddef.h中定义的,size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数
描述C 库宏 offsetof(type, member-designator) 会生成一个类型为 size_t 的整型常量,它是一个结构成员相对于结构开头的字节偏移量。成员是由 member-designator 给定的,结构的名称是在 type 中给定的。
声明下面是 offsetof() 宏的声明。
offsetof(type, member-designator)返回值该宏返回类型为 size_t 的值,表示 type 中成员的偏移量
#include#include //使用宏定义 #define OFFSETOF(struct_name,member_name) (size_t)&(((struct_name*)0)->member_name) struct S{ char c1; int a; char* c2; }; int main(){ //struct S s;创建s变量,在内存中申请一块空间 printf("%d n",OFFSETOF(struct S, c1)); printf("%d n",OFFSETOF(struct S, a)); printf("%d n",OFFSETOF(struct S, c2)); return 0; }



