//写一个宏计算结构体中某变量相对于首地址的偏移
#include <stdio.h>
#include <stddef.h>
struct S
{
char c1;
int i;
char c2;
};
//每个成员相较于起始位置偏移量
int main()
{
struct S s = { 0 };
printf("%d\n", offsetof(struct S, c1));//0
printf("%d\n", offsetof(struct S, i));//4
printf("%d\n", offsetof(struct S, c2));//8
return 0;
}
用宏写:
#include <stdio.h>
struct S
{
char c1;
int i;
char c2;
};
#define OFFSETOF(type,m_name) (size_t)&(((struct S*)0)->m_name)
//求type类型成员相对于起始位置偏移量:把0强制类型转换成地址,作为起始地址,通过地址找到成员m_name,取出成员地址,强制类型转换成size_t类型
int main()
{
struct S s = { 0 };
printf("%d\n", OFFSETOF(struct S, c1));//0
printf("%d\n", OFFSETOF(struct S, i));//4
printf("%d\n", OFFSETOF(struct S, c2));//8
return 0;
}