offsetof宏的使用和模拟实现
前言
本文主要介绍offsetof宏的使用和模拟实现!(结尾附有源代码)
一、offsetof宏的实现
参考MSDN
这句话的意思是:查找结构体成员相对于结构开头的偏移量。
参数是结构体的名字和结构体成员的名字!
代码如下(示例):
#include<stddef.h>
struct ss
{
int a;
char b;
double c;
}ss;
int main()
{
printf("%d\n", offsetof(struct ss, a));
printf("%d\n", offsetof(struct ss, b));
printf("%d\n", offsetof(struct ss, c));
return 0;
}
,也就是说offsetof宏直接返回结构体成员的偏移量
二、模拟实现offsetof宏
1.原理(图解)
所以可以得到的是偏移量= (size_t)&(地址-0)
2.代码实现
代码如下(示例):
struct ss
{
int a;
char b;
double c;
}ss;
#define OFFSETOF(st_type,mem_name) (size_t)&(((st_type*)0)->mem_name)
int main()
{
printf("%d\n", OFFSETOF(struct ss, a));
printf("%d\n", OFFSETOF(struct ss, b));
printf("%d\n", OFFSETOF(struct ss, c));
return 0;
}
注意:(size_t)&(((st_type*)0)->mem_name)这段代码的本质是:
总结
例如:以上就是今天要讲的内容,本文仅仅简单介绍了offsetof宏的使用以及模拟实现原理。如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!