offsetof宏计算某变量相对于首地址的偏移量

宏:offsetof的使用

cpp 复制代码
//offsetof (type,member)
//type是结构体的类型名,member是结构体中的成员名。
cpp 复制代码
struct Student
{
	char name[5]; // 姓名
	int age;       // 年龄
	float score;   // 成绩
};

int main()
{
	struct Student s;

	printf("%zd\n", offsetof(struct	Student, name));
	printf("%zd\n", offsetof(struct	Student, age));
	printf("%zd\n", offsetof(struct	Student, score));

	return 0;
}

我们通过画图可以只管看出结构体是如何存储数据的:

可以发现通过offsteof 宏确实可以准确的计算出每个成员的偏移量,这就是offsetof宏的的作用。

offsetof宏的实现

cpp 复制代码
#define my_offsetof(TYPE,MEMBER)      (size_t)&(((TYPE*)0)->MEMBER)

来使用一下:

cpp 复制代码
#define my_offsetof(TYPE,MEMBER)      (size_t)&(((TYPE*)0)->MEMBER)
struct Student
{
	char name[5]; // 姓名
	int age;       // 年龄
	float score;   // 成绩
};
int main()
{
	struct Student s;

	printf("%p\n", &s);
	printf("%p\n", &(s.name));
	printf("%p\n", &(s.age));
	printf("%p\n", &(s.score));


	printf("%zd\n", my_offsetof(struct	Student, name));
	printf("%zd\n", my_offsetof(struct	Student, age));
	printf("%zd\n", my_offsetof(struct	Student, score));
	return 0;
}

感谢您的支持!!!!

相关推荐
快乐的划水a4 小时前
组合模式及优化
c++·设计模式·组合模式
星星火柴9365 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
艾莉丝努力练剑6 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
Cx330❀7 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
阿巴~阿巴~8 小时前
深入解析C++ STL链表(List)模拟实现
开发语言·c++·链表·stl·list
..过云雨8 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
旺小仔.9 小时前
双指针和codetop复习
数据结构·c++·算法
jingfeng5149 小时前
C++ STL-string类底层实现
前端·c++·算法
郝学胜-神的一滴9 小时前
基于C++的词法分析器:使用正则表达式的实现
开发语言·c++·程序人生·正则表达式·stl
谱写秋天10 小时前
在STM32F103上进行FreeRTOS移植和配置(STM32CubeIDE)
c语言·stm32·单片机·freertos