当前位置: 首页 > news >正文

免费响应式模板网站网站换空间要重新备案吗

免费响应式模板网站,网站换空间要重新备案吗,盐城做网站推广电话,厦门某某公司网站题目&#xff1a;写一个宏&#xff0c;计算结构体中某变量相对于首地址的偏移&#xff0c;并给出说明 注&#xff1a;这个题目主要是在考察offsetof宏的实现 1.offsetof函数的定义 #include <stddef.h> size_t offsetof(type, member);但请注意&#xff0c;实际上off…

题目:写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明
注:这个题目主要是在考察offsetof宏的实现

1.offsetof函数的定义

#include <stddef.h>  
size_t offsetof(type, member);

但请注意,实际上offsetof是一个宏,而不是一个函数
它接受两个参数:一个结构体类型和一个该类型中的成员名称,并返回该成员在结构体中的字节偏移量
使用举例:

#include <stddef.h>
#include<stdio.h>
struct S 
{double a;int b;char c;
};int main()
{printf("S 结构中的 a 偏移 = %d 字节。\n", (int)offsetof(struct S,a));//0printf("S 结构中的 b 偏移 = %d 字节。\n", (int)offsetof(struct S,b));//8printf("S 结构中的 c 偏移 = %d 字节。\n", (int)offsetof(struct S,c));//12
}

2.offsetof的模拟实现

我们假设结构体起始地址是0,则其成员的地址取出来再强制类型转换为int便可以表示结构体中某个成员相对于起始位置的偏移量

StructType是结构体类型名,MemberName是成员名。具体操作方法是:

  1. 先将0转换为一个结构体类型的指针,相当于某个结构体的首地址是0。此时,每一个成员的偏移量就成了相对0的偏移量,这样就不需要减去首地址了。这只是一个计算技巧,我们并没有真正去访问地址0的内存(否则会导致程序崩溃)
  2. 对该指针用->访问其成员,并取出地址,由于结构体起始地址为0,此时成员偏移量直接相当于对0的偏移量,所以得到的值直接就是对首地址的偏移量
  3. 取出该成员的地址,强转成size_t并打印,就求出了这个偏移量
#define OFFSETOF(StructType, MemberName) (size_t)&(((StructType *)0)->MemberName)// (StructType *)0  *用于将数字0强制转换成一个指向StructType结构体类型的指针
struct StructType
{int a;char c;double d;
};
int main()
{printf("%d\n", OFFSETOF(struct StructType, a));printf("%d\n", OFFSETOF(struct StructType, c));printf("%d\n", OFFSETOF(struct StructType, d));return 0;
}

注意:这里有一个关键点在于,C编译器在编译时就知道结构体内每个成员的精确偏移量,而OFFSEROF宏只是利用编译器的这个知识来获取偏移量数值,并不真正访问内存
这个过程不会影响真实内存
因为这个过程完全发生再编译阶段,而不是运行时:
4. 编译器在编译时就知道结构体的内存布局
5. 当看到这个表达式时,编译器直接计算偏移量数值
6. 最终生成的代码中不包含任何实际访问地址0的操作
7. 结果是一个编译时常量,直接嵌入到最终的可执行文件中

类比理解,可以把其想象成:
8. 你有一张建筑蓝图(结构体定义)
9. 你想知道某个房间距离大楼入口有多远(成员偏移量)
10. 你说:“假设大楼入口在坐标0点,那么房间的坐标就是它距离入口的偏移量”
11. 你不需要真正建造这栋大楼就能计算出这个距离

http://www.dtcms.com/a/581368.html

相关文章:

  • 【Rust】时间轮的数据结构于设计模式
  • 解决cryptography库报错【DLL load failed while importing _rust】
  • JASP:一款免费开源的统计软件,SPSS替代产品
  • 【JS Utils】Vue2 自定义计算属性 (兼容 uniapp 和 Vue 2.7 以前版本)
  • React 16
  • 东莞网站建设技术支持南京网站建设 零云建站
  • wordpress通知站点360搜索品牌建设与管理提案
  • Python实现手写数字识别
  • 零成本体验云计算!阿贝云免费服务器深度测评
  • 如何在Mac上同步iPhone短信
  • 网站建设好后有些什么资料软件工程月薪一般多少
  • Fastapi 进阶一:Fastapi依赖注入机制详解
  • Java实用面试经验:接口编程概念与技巧总结
  • 在VMWare上搭建Flume集群
  • vue_day04
  • 深入浅出 SPA/MPA
  • 怎么增加网站的关键词库个人网站申请空间
  • (已发25年8月华为云、51CTO)数组编程:编程的基础数据结构!
  • 北京网站制作设计哪个公司好网站开发人员结构配比
  • 面对未来:企业决策与适应力
  • bat 批处理实现 FFmpeg 命令压缩 MP4
  • openEuler 云原生实战:部署高性能 Redis 集群与压测分析
  • 机器学习-逻辑回归与二分类
  • 老玩家流失?基于数据驱动的游戏用户流失分析与干预策略
  • 做网站的公司名字北京注册网站
  • 如何用c 做网站hao123从网上开始
  • ThinkPHP 8 多应用模式下如何隐藏路由中的应用名
  • [SEO]网站不收录的原因及解决方法有哪些
  • conda以及Jupyter notebook的使用
  • 告别手动录入:文档抽取技术如何让RPA处理非结构化数据?