目录

一、offsetof的用法

二、宏实现

三、测试代码

 


一、offsetof的用法


用法:用于计算某结构体中的成员偏移量

#include <stdio.h>
struct Stu
{
	int a; // 偏移量0
	char b;// 偏移量4
	int c;//  偏移量8
};

int main()
{
	printf("%d\n", offsetof(struct Stu, c)); // 打印成员c的偏移量8

	return 0;
}

二、宏实现


想办法用宏来计算结构体中的成员偏移量

设计宏参数:结构体名,结构体成员名

宏内部实现:将0地址强制转化为这个结构体类型的地址,相当于在0地址这里存放了一个结构体,再找到0地址处结构体内成员的地址,这个成员的地址就是这个成员偏移量的大小

#define OFFSETOF(st_type, mem_name) (size_t)&(((st_type*)0)->mem_name)

三、测试代码

#include <stdio.h>
struct Stu
{
	int a;
	char b;
	int c;
};

#define OFFSETOF(st_type, mem_name) (size_t)&(((st_type*)0)->mem_name)

int main()
{
	printf("%d\n", OFFSETOF(struct Stu, c)); // 打印 8

	return 0;
}