思路:
有个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<stdio.h>
#include<stddef.h>
//使用宏定义
#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;
}