在项目开发过程中,发现了offsetof()函数,随即查询了此函数,摘录如下:
C库宏 - offsetof()
描述
C库宏offsetof(type, member-designator)会生成一个类型为size_t的整形常量,它是一个结构成员相对于结构开头的字节偏移量。成员是由member-designator给定的,结构的名称是在type中给定的。
声明
下面是offsetof()宏的声明
offsetof(type, member-designator)
参数
- type -- 这是一个class类型,其中,member-designator是一个有效的成员指示器。
- member-designator -- 这是一个class类型的成员指示器
返回值
该宏返回类型为size_t的值,表示type中成员的偏移量。
实例
下面的实例演示了offsetof()宏的用法。
#include <stddef.h>
#include <stdio.h>
struct address {
char name[50];
char street[50];
int phone;
};
int main() {
printf("address 结构中的name偏移 = %d字节。\n",
offsetof(struct address, name));
printf("address结构中的street偏移 = %d字节。\n",
offsetof(struct address, street));
printf("address 结构中的street偏移的%d字节。\n",
offsetof(struct address, phone));
return(0);
}
让我们编译并运行上面的程序,这将产生以下结果:
address 结构中的name偏移 = 0字节
address 结构中的struct偏移 = 50字节
address 结构中的phone偏移 = 100字节
参考链接:http://www.runoob.com/cprogramming/c-macro-offsetof.html