【漫步刷题路】-模拟实现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;
}
相关文章
|
4月前
递推 4----7-4 sdut-C语言实验-马拦过河卒
递推 4----7-4 sdut-C语言实验-马拦过河卒
36 0
|
4月前
递推 7-1 sdut-C语言实验-母牛的故事
递推 7-1 sdut-C语言实验-母牛的故事
24 0
|
6月前
|
机器学习/深度学习 Java Python
代码解密 | 2024春晚刘谦魔术与约瑟夫环问题
2024春节联欢晚会中,刘谦老师的魔术节目可以说是我心目中的全场最佳~春晚刚结束网上就有大佬给出了第二个魔术(拼扑克牌)的数学模拟,也有大佬发布了代码程序。博主在模拟了魔术过程之后,也在此分享一下程序代码和思路。同时,也借此回顾一下经典的数学问题:约瑟夫环问题。
103 8
|
5月前
【洛谷 P1563】[NOIP2016 提高组] 玩具谜题(模拟+结构体数组+指针)
**摘要:** NOIP2016提高组的玩具谜题是一个编程挑战,涉及理解玩具小人在圆圈中的相对位置。题目要求解决一系列基于小人朝向(内或外)的左右数指令,来找到最终目标小人。输入包含小人数量、指令数、每个小人的朝向和职业,以及指令详情。输出是最后到达的小人的职业。给定的AC代码使用指针模拟环状数组,通过按位异或判断朝向来移动指针。样例展示了问题的解决过程。子任务有不同的数据规模和限制条件。
54 0
|
存储 机器人 C++
leetcode 每日一题 874. 模拟行走机器人 c++模拟解法
简单来说就是机器人在一个矩阵上移动 我们要找到一个离原点的一个最大欧式距离的平方
131 0
|
6月前
|
算法
2024春晚纸牌魔术原理----环形链表的约瑟夫问题
2024春晚纸牌魔术原理----环形链表的约瑟夫问题
C生万物 | 从浅入深理解指针【第四部分】(qsort的使用和模拟实现)
C生万物 | 从浅入深理解指针【第四部分】(qsort的使用和模拟实现)
|
6月前
【每日一题Day338】LC2582递枕头 | 模拟+数学
【每日一题Day338】LC2582递枕头 | 模拟+数学
29 0
|
6月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 174. 地下城游戏 算法解析
☆打卡算法☆LeetCode 174. 地下城游戏 算法解析
|
11月前
|
程序员 编译器 C++
C生万物 | 模拟实现库函数strcpy之梅开n度
C生万物 | 模拟实现库函数strcpy之梅开n度
53 0