实现宏offsetof
offsetof
offsetof(类型,成员)
返回成员偏移量
具有函数形式的此宏返回数据结构或联合类型类型中成员成员的偏移值(以字节为单位)。 返回的值是size_t类型的无符号整数值,以及指定成员与其结构开头之间的字节数。
定义一个结构体指针S* A ; 未初始化的这个指针是一个野指针(并没有指向有效合法的内存空间), 但仍存在&(A->b) - A 的值是成员b的偏移值(该成员与其结构开头之间的字节数) , 如图 :
我们可以验证确实如此
#include <stdio.h>
#include<stdlib.h>
#define Offsetof(s,m) ((size_t)&(((s*)0)->m))
typedef struct {
double a;
char str[10];
int b;
char c;
}S;
int main() {
int a = 0;//地址为0
S* A = (S*)a;//结构体指针
printf("%d\n",(size_t)&(A->b));//结构体从地址0开始, &(A->b)为b的地址
printf("%d\n", (size_t)&(A->c));
printf("%d\n", offsetof(S, b));
printf("%d\n", Offsetof(S, b));
printf("%d\n", offsetof(S, c));
printf("%d\n", Offsetof(S, c));
system("pause");
return 0;
}