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;
}

感谢您的支持!!!!

相关推荐
小欣加油2 分钟前
leetcode 3318 计算子数组的x-sum I
c++·算法·leetcode·职场和发展
j_xxx404_1 小时前
C++ STL:list|了解list|相关接口|相关操作
开发语言·c++
kyle~1 小时前
机器视觉---Intel RealSense SDK 2.0 开发流程
运维·c++·windows·深度相机·intel realsense
脏脏a1 小时前
类与对象(上):面向过程到面向对象的跨越,类的定义、封装与 this 指针等核心概念深度剖析
开发语言·c++
AI柠檬2 小时前
C语言基于MPI并行计算矩阵的乘法
c语言·c++·算法
小无名呀2 小时前
socket_udp
linux·网络·c++·网络协议·计算机网络·udp
闻缺陷则喜何志丹3 小时前
【贪心 字典序 回文 最长公共前缀】LeetCode3734. 大于目标字符串的最小字典序回文排列|分数未知
c++·算法·力扣·贪心·字典序·回文·最长公共前缀
czy87874753 小时前
C语言实现观察者模式
c语言·观察者模式
_OP_CHEN4 小时前
C++进阶:(四)set系列容器的全面指南
开发语言·c++·stl·set·multiset·关联式容器·setoj题
代码雕刻家4 小时前
1.4.课设实验-数据结构-单链表-文教文化用品品牌2.0
c语言·数据结构