使用宏模拟offsetof

简介: 使用宏模拟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;
}



相关文章
|
6月前
|
C语言
【C语言】库宏offsetof(结构体成员偏移量计算宏)
【C语言】库宏offsetof(结构体成员偏移量计算宏)
50 0
|
C语言
【C语言】atoi函数的使用和模拟实现
本篇将介绍atoi函数的使用,通过实例讲解函数的使用方法,模拟实现atoi函数。
142 1
|
C语言
【C语言】memcpy函数和memmove函数使用和模拟实现
【C语言】memcpy函数和memmove函数使用和模拟实现
82 0
|
6月前
|
编译器 C语言
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
|
5月前
offsetof宏(想了解offsetof宏的使用,那么看这一篇就足够了!)
offsetof宏(想了解offsetof宏的使用,那么看这一篇就足够了!)
|
5月前
|
算法 C语言
【C语言】:atoi函数的使用及其模拟实现
【C语言】:atoi函数的使用及其模拟实现
42 5
|
6月前
|
存储 C++
c/c++宏定义(函数)
c/c++宏定义(函数)
|
6月前
|
Linux
offsetof宏与container_of宏
offsetof宏与container_of宏
35 0
|
6月前
用一行代码实现宏offsetof
用一行代码实现宏offsetof
|
6月前
|
编译器
#define 宏定义看这一篇文章就够了
#define 宏定义看这一篇文章就够了
238 0