【漫步刷题路】-模拟实现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;
}
相关文章
|
负载均衡 应用服务中间件 Docker
Docker Service 创建
Docker Service 创建
|
容器
16EasyUI - 创建标签页(Tabs)
16EasyUI - 创建标签页(Tabs)
120 0
|
人工智能
跟着Cell学作图 | 12.韦恩图(Vennerable包)
跟着Cell学作图 | 12.韦恩图(Vennerable包)
1250 0
跟着Cell学作图 | 12.韦恩图(Vennerable包)
|
关系型数据库 MySQL Java
9. 成功解决:Driver class &#39;org.gjt.mm.mysql.Driver&#39; could not be found
在使用 Kettle(Spoon) 工具创建 MySQL 数据库连接时,提示:Driver class &#39;org.gjt.mm.mysql.Driver&#39; could not be found, make sure the &#39;MySQL&#39; driver (jar file) is installed. org.gjt.mm.mysql.Driver
4324 0
|
关系型数据库 PostgreSQL
|
机器学习/深度学习 城市大脑 人工智能
人狠话不多!阿里成立半导体公司「平头哥」:首款 AI 芯片明年面世
9 月 19 日上午,由杭州市政府与阿里巴巴主办、最具影响力的云计算峰会——「云栖大会」在杭州开幕。大会首日,阿里巴巴发布了城市大脑 2.0 版,宣布成立「平头哥」半导体公司开发 AI 芯片,吸引了众人关注。
1540 0
人狠话不多!阿里成立半导体公司「平头哥」:首款 AI 芯片明年面世
|
机器学习/深度学习 弹性计算 安全
阿里云ECS服务器体验——寒假
云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的云计算服务,我主要使用其镜像系统的功能。对我来说,它就是个基础设施级别的服务。寒假期间,我利用该云服务搭建了云上的Node-red服务,使用dashboard,帮助不会web开发的我完成了一些基础的页面功能。由于我主攻物联网开发,平时多使用mqtt服务,所以在站上搭建了mosquitto服务,作为我mqtt服务的broker。最后,使用frp服务搭建了我自己的内网穿透服务,使我能够完成远程操作我自己的设备,比如树莓派、PC等。而不需要使用向日葵等远程软件。
阿里云ECS服务器体验——寒假
|
Unix Linux
SOLARS AIX LINUX 下移动数据库文件到裸设备
SOLARS AIX LINUX 下移动数据库文件到裸设备 SOLARIS:  SQL> create tablespace test1  2  datafile '/oradata/ora11g/test01.
860 0
|
3天前
|
数据采集 人工智能 安全