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



相关文章
|
C语言
模拟库函数strcpy
关于库函数strcpy()的详细内容,跳转文章:《C语言:字符串拷贝函数strcpy()》
38 0
|
C语言
【C语言】memcpy函数和memmove函数使用和模拟实现
【C语言】memcpy函数和memmove函数使用和模拟实现
91 0
|
6月前
offsetof宏(想了解offsetof宏的使用,那么看这一篇就足够了!)
offsetof宏(想了解offsetof宏的使用,那么看这一篇就足够了!)
|
6月前
|
C语言 C++
C语言学习记录——内存函数(memcpy、memmove、memcmp、memset、模拟实现memcpy、模拟实现memmove)
C语言学习记录——内存函数(memcpy、memmove、memcmp、memset、模拟实现memcpy、模拟实现memmove)
70 3
|
7月前
|
编译器 C++
memmove函数和memcpy函数的模拟实现
memmove函数和memcpy函数的模拟实现
31 1
模拟实现库函数,strtsr,memmove.
<1>主页:C语言的前男友 <2>知识讲解:模拟实现 库函数 strstr,memmove <3>创作者:C语言的前男友 <4>开发环境:Visual Studio 2022 <5>前言:学习了strstr,memnove等库里面的内存相关的函数,功能非常的强大。今天我们来模拟实现一下。
|
7月前
|
Linux
offsetof宏与container_of宏
offsetof宏与container_of宏
41 0
|
7月前
用一行代码实现宏offsetof
用一行代码实现宏offsetof
模拟实现库函数strlen
模拟实现库函数strlen
32 0
|
C语言
C语言的offsetof宏模拟和用宏实现交换奇偶位
C语言的offsetof宏模拟和用宏实现交换奇偶位