【漫步刷题路】-模拟实现offsetof

简介: 代码讲解:把0强转为结构体指针,向后可以访问一个结构体认为后面存放了一个结构体变量

🚗库函数原型

78adc3d4542d4c42862da0d4aa2a7aa6.png

需要引用头文件:#include<stddef.h>

  • 第一个参数:结构体类型
  • 第二个参数:结构体成员名字

作用:求结构体成员相对于起始位置的偏移量


🚓实例:

132b0927d9204bba84de156a64960a34.png

#include<stddef.h>
struct S
{
  char c;
  short s;
  int i;
};
int main()
{
  printf("%u\n", offsetof(struct S, c));//0
  printf("%u\n", offsetof(struct S, s));//2
  printf("%u\n", offsetof(struct S, i));//4
  return 0;
}

🚕模拟实现offsetof - 宏


🚅 图解

例子1:

82b373be8a174c0ea78010041698a058.png

代码讲解:

把0强转为结构体指针,向后可以访问一个结构体

认为后面存放了一个结构体变量

ddc4d7c4808549dcb59c85c4629b7f75.png

188db70397194d20a5d36a77b2f05553.png

🚂代码

#include<stddef.h>
#define OFFSETOF(struct_type,mem_name)  \
       (size_t)(&((struct_type*)0)->mem_name)
struct S
{
  char c;
  short s;
  int i;
};
int main()
{
  printf("%u\n", offsetof(struct S, c));//0
  printf("%u\n", offsetof(struct S, s));//2
  printf("%u\n", offsetof(struct S, i));//4
  printf("%u\n", OFFSETOF(struct S, c));//(size_t)(&((struct S*)0)->c) ->0
  printf("%u\n", OFFSETOF(struct S, s));//(size_t)(&((struct S*)0)->s) ->2
  printf("%u\n", OFFSETOF(struct S, i));//(size_t)(&((struct S*)0)->i) ->4
  return 0;
}
相关文章
|
算法 C++
【洛谷算法题】P5707-上学迟到【入门1顺序结构】
【洛谷算法题】P5707-上学迟到【入门1顺序结构】
|
7月前
|
机器学习/深度学习
7-2 sdut-C语言实验-刘老师的要求之踩方格
7-2 sdut-C语言实验-刘老师的要求之踩方格
54 1
|
7月前
递推 4----7-4 sdut-C语言实验-马拦过河卒
递推 4----7-4 sdut-C语言实验-马拦过河卒
80 0
|
7月前
7-4 sdut-C语言实验-青蛙过河
7-4 sdut-C语言实验-青蛙过河
45 0
|
C语言 C++
C语言刷题系列——7.(洛谷)上学迟到
C语言刷题系列——7.(洛谷)上学迟到
304 0
|
9月前
|
C++
百钱百鸡(代码实现)
百钱百鸡(代码实现)
100 0
|
算法 Java Android开发
数据结构与算法 #18 下跳棋,极富想象力的同向双指针模拟
这道题是 LeetCode 上的 [1040. 移动石子直到连续 II](https://leetcode.cn/problems/moving-stones-until-consecutive-ii/),难度是 Meduium,难度分是 2455。虽然是 Medium 题,但是打 Hard 标签一点也不为过。长期作为中等题的难度 Top1,直到去年被 [2289. 使数组按非递减顺序排列 ](https://leetcode.cn/problems/steps-to-make-array-non-decreasing/) 题挤下来。
97 0
数据结构与算法 #18 下跳棋,极富想象力的同向双指针模拟
|
机器学习/深度学习
蓝桥 金陵十三钗 (状压+记忆化搜索)
蓝桥 金陵十三钗 (状压+记忆化搜索)
C语言—————三子棋,步步分解
C语言—————三子棋,步步分解
|
设计模式 存储 测试技术
【C++】栈和队列的模拟实现 & 经典题目解析
【C++】栈和队列的模拟实现 & 经典题目解析
226 0
【C++】栈和队列的模拟实现 & 经典题目解析