C语言中有这样一个宏offsetof
,它的作用是计算结构体成员相对于结构体的偏移,原型如下:
#define offsetof(type, member) (size_t) &((type*)0)->member
参数说明:
- type:结构体类型
- member:结构体成员
原理分析:
偏移 = 成员地址 - 结构体地址
,若结构体地址为0,则偏移 = 成员地址
;
示例:
#include <stdio.h>
#define offsetof(type, member) (size_t) &((type*)0)->member
typedef struct
{
char a;
int b;
int c;
}test;
void main(void)
{
printf("offset: %ld %ld\r\n", offsetof(test, b), offsetof(test, c));
}
输出:
offset: 4 8