• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > define宏定义的这句话是什么意思呢?

define宏定义的这句话是什么意思呢?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了这句话,这句话让我感动,这句话启发了我,鲁迅我没说过这句话,这句话影响了我作文等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:define宏定义的这句话是什么意思呢?
描述:

在一本书上看到了这段代码,其含义是求一个结构体成员相对于结构体开始位置的偏移量,但不理解其含义,求大牛解释.

struct{
    int a;
    double b[20];
    double c;
}struc;

#define FIND(struc,c) ((size_t)&((struc *)0)->e)

解决方案1:

struct结构体对象的内存位置是连续的,假设整个对象的起始地址是0,(struc *)0这里做了强制转换;那么我们首先解引用取得结构体某个元素的值

struc* p = (struc *)0;
double c = p->c;

然后再获得元素的地址,这个地址就是相对于整个结构体对象内存的起始位置的

size_t offset =(size_t)( &c - (size_t)0);

题主你看的是扫描版的么?

解决方案2:

这个宏应该是参考linux的offsetof宏定义:
#define offsetof(TYPE, MEMBER) (size_t)(&(((TYPE*)0)->MEMBER))

这个宏的分析:

(TYPE*)0 将0地址强转为TYPE类型的指针

((TYPE*)0)->MEMBER 获取TYPE结构体中的成员MEMBER

&(((TYPE*)0)->MEMBER) 获取成员MEMBER的地址, 通常我们拿这个地址值减去整个结构体的起始地址即可得出MEMBER的偏移地址, 但因为现在结构体的起始地址为0(这个0就是整个宏定义的精华所在), 所以获取的地址即为实际的偏移地址(减去0等于没减嘛)


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何理解“在函数之间传递变量时,总是以值的方式传递的”这句话?
  • flaskflask有句话不是太懂?
  • 你猜你猜你猜猜猜张杰如何理解”猜字游戏“中的这句话?
  • 麻烦看下我根据自己理解写出的三种排序算法是否正确??
  • (python)"你的环境有问题"这句话中的环境指的是什么?
  • 怎么理解Python文档中的这句话
  • redislist实现中下面这句话什么意思啊
  • 这句话里againstwhich是什么意思?
  • CSS是上下文无关的语法,这句话该如何理解呢?
  • define宏定义的这句话是什么意思呢?

相关文章

  • 2017-06-07 最近速度变慢了,这次dns又挂
  • 2017-06-07 多层构架在实践中一些问题
  • 2017-06-07 API更新跟不上节奏啊
  • 2017-06-07 masm32编译invokeExitProcess,0结果出来一个call$+5
  • 2017-06-07 python的相对导入
  • 2017-06-07 正则匹配问题
  • 2017-06-07 如何匹配"height:12px;width:56px;background:#fff;"中间的"width:56px;"?
  • 2017-06-07 (python)让requests不走系统全局代理
  • 2017-06-07 python控制shell执行时间,若超时则强行推出
  • 2017-06-07 javascript正则前瞻如何完整匹配这个8位数字

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • python多线程python多个线程锁可提高效率吗?
    • 新手学汇编遇到个疑问。
    • (shell)能否详细解释一下这条sed命令的含义?
    • (python)如何用FlaskURL变量类型过滤,获取多层路径的每一层的数值?
    • Golang如何随机监听某一范围内的端口
    • 七牛云用来存储用户头像,更新头像时,如何更新缓存?
    • iTerm2在dock任务栏隐藏重启电脑之后无法启动
    • 我上传的到七牛的图片为什么使用imageView2接口没有作用
    • 读《python基础教程第2》发现问题,求助!
    • 有人知道weibo短链接转换是如何实现吗?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有