文章前言:
本文简单介绍offsetof宏作用及实现。
作用:
offsetof宏是C语言中一个已经实现的宏,其主要作用就是在给定的结构体类型中,对某个存在的结构体成员的相对于结构体起始地址偏移量的计算。
//宏的格式
offsetof (type,member)
实现:
1、像这种在同一空间中、有相对位置偏移量的计算,可以采用“指针-指针”的形式计算得知。
就是直接通过末地址-起始地址得到一个相对数值,再强制转换为int 或 size_t得到偏移量。
2、我们可以把一个结构体当成为一个独立的空间,毕竟只是通过相对数值的方式求出偏移量,
不妨将结构体起始位置当成0,可以将对应指针设为0,这样指向指定结构体成员时,其地址就是相对数值。
具体实现:
#define OFFSETOF1(type_name, mem_name) (size_t)&(((type_name*)0)->mem_name)
效果:
struct list
{
char name[20];
int age;
double grade;
}n1;
int main()
{
printf("%d\n", OFFSETOF1(struct list, age));//20
return 0;
}