【C语言进阶】offsetof 宏的实现

【C语言进阶】offsetof 宏的实现,第1张

目录

宏的介绍

代码实现 


 

offsetof 是一个宏,并非是一个函数 !!!

宏的介绍

 参数:第一个是结构体类型名称,第二个是结构体成员名

返回类型:size_t无符号整形

引用的头文件:

#include 
struct Stu
{
	int a;//0~3
	char c;//4
	double d;//8~15
};
int main()
{
	printf("%u\n", sizeof(struct Stu));
	printf("%u\n", offsetof(struct Stu, a));
	printf("%u\n", offsetof(struct Stu, c));
	printf("%u\n", offsetof(struct Stu, d));
	return 0;
}

 

代码实现 
struct Stu
{
	int a;
	char c;
	double d;
};

#define OFFSETOF(struct_name, mem_name)    (int) & (((struct_name*)0) -> mem_name)


int main()
{
	printf("%d\n", OFFSETOF(struct Stu, a));
	printf("%d\n", OFFSETOF(struct Stu, c));
	printf("%d\n", OFFSETOF(struct Stu, d));
	return 0;
}

就是将结构体指针规定为0,然后把其他成员的地址-首地址,就是最后的偏移量

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/707134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存