使用宏模拟offsetof
Posted 跳动的bit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用宏模拟offsetof相关的知识,希望对你有一定的参考价值。
🎗 先来回忆下offsetof宏是怎么使用的
⭕ 函数信息
#include<stdio.h>
#include<stddef.h>
struct A
{
int a;
short b;
int c;
char d;
};
int main()
{
printf("%d\\n", offsetof(struct A, a));
printf("%d\\n", offsetof(struct A, b));
printf("%d\\n", offsetof(struct A, c));
printf("%d\\n", offsetof(struct A, d));
return 0;
}
📝 题述1:模拟一个offsetof宏
💨 输入描述:无
💨 输出描述:输出结构体所有成员相对于起始位置的偏移量
🔑 核心思想:
结构体成员的地址 - 起始地址就是这个结构体成员的偏移量
(int) & (((struct A*)0x400) -> b) - 0x400
假设在结构体的起始位置有一个struct A*类型的变量0,然后拿出结构体成员的地址,再把地址强转为整型就是这些成员相对于起始位置的偏移量
#include<stdio.h>
#define OFFSETOF(struct_name, member_name) (int)&(((struct_name*)0) -> member_name)
struct A
{
double a;
char b;
int c;
};
int main()
{
printf("%d\\n", OFFSETOF(struct A, a));
printf("%d\\n", OFFSETOF(struct A, b));
printf("%d\\n", OFFSETOF(struct A, c));
return 0;
}
以上是关于使用宏模拟offsetof的主要内容,如果未能解决你的问题,请参考以下文章