【漫步刷题路】-模拟实现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;
}
相关文章
|
7月前
|
C语言
c语言编程练习题:7-39 龟兔赛跑
c语言编程练习题:7-39 龟兔赛跑
157 0
|
6月前
|
C语言
【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?
【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?
39 1
|
5月前
递推 4----7-4 sdut-C语言实验-马拦过河卒
递推 4----7-4 sdut-C语言实验-马拦过河卒
54 0
|
5月前
7-4 sdut-C语言实验-青蛙过河
7-4 sdut-C语言实验-青蛙过河
31 0
|
6月前
【洛谷 P1563】[NOIP2016 提高组] 玩具谜题(模拟+结构体数组+指针)
**摘要:** NOIP2016提高组的玩具谜题是一个编程挑战,涉及理解玩具小人在圆圈中的相对位置。题目要求解决一系列基于小人朝向(内或外)的左右数指令,来找到最终目标小人。输入包含小人数量、指令数、每个小人的朝向和职业,以及指令详情。输出是最后到达的小人的职业。给定的AC代码使用指针模拟环状数组,通过按位异或判断朝向来移动指针。样例展示了问题的解决过程。子任务有不同的数据规模和限制条件。
60 0
C生万物 | 从浅入深理解指针【第四部分】(qsort的使用和模拟实现)
C生万物 | 从浅入深理解指针【第四部分】(qsort的使用和模拟实现)
|
C语言
【C语言刷题】找单身狗、模拟实现atoi
【C语言刷题】找单身狗、模拟实现atoi
67 0
[算法刷题题解笔记] 洛谷 P1008 [NOIP1998 普及组] 三连击 [枚举|模拟]
[算法刷题题解笔记] 洛谷 P1008 [NOIP1998 普及组] 三连击 [枚举|模拟]
|
C语言
C语言练级之路num5(一些蓝桥杯的小题目)
C语言练级之路num5(一些蓝桥杯的小题目)
|
算法
leetcode-每日一题735. 行星碰撞(栈模拟)
重复以上判断直到不满足条件,如果最后 alive 为真,说明行星 aster 不会爆炸,则将 aster 入栈
101 0
leetcode-每日一题735. 行星碰撞(栈模拟)