功能描述:求结构体中某元素在结构中的相对偏移量
要点:很有用!涉及到内存字节对齐问题,不同的编译器对齐机制可能不同,所以用该函数可以准确求出某元素的偏移(man offsetof了解更多)
以下是man offsetof里面的例子代码:
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
struct s {
int i;
char c;
double d;
char a[];
};
/* 输出结果视编译器类型而定 */
printf ("offsets: i=%ld; c=%ld; d=%ld; a=%ld\n",
(long) offsetof (struct s, i),
(long) offsetof (struct s, c),
(long) offsetof (struct s, d),
(long) offsetof (struct s, a));
printf ("sizeof(struct s)=%ld\n", (long) sizeof(struct s));
/* 关于整个结构的大小,要点:最后一个结构体元素--数组,暂未分配空间 */
return 0;
}
/* 一个可能结果:
* offsets: i=0; c=4; d=8; a=16
* sizeof(struct s)=16
*/