C 指针算术 sizeof(struct)

2023-11-22

这是有问题的代码

#include <stdio.h>

struct test {
    unsigned char t;
    unsigned short u;
    unsigned char v;
};


int main ()
{
    struct test  * a = (void *) 0x1000;

    printf("%x %p %p\n",
           sizeof(struct test),
           a + sizeof(struct test),
           a - sizeof(struct test));

    return 0;
}

sizeof(struct test) 打印 6,所以我会expect to see:

6 0xffa 0x1006

相反我得到

6 0x1024 0xfdc

上次我检查时,0x24 或 36 不等于 6。它甚至与我所知的任何内容都不相符。我完全不知所措。

有人可以向我解释为什么我会得到这些值吗?


问题是当你进行指针算术时,它会增加一个multiple数据类型的大小。

所以你有效地做的就是加上sizeof(struct test).

Since sizeof(struct test) = 6,您将地址增加6 * 6 = 36。因此为什么你会得到0x1024 and 0xfdc代替0x1006 and 0xffa。 (您还切换了+ and -,但这只是小事。)

相反,只需这样做:

printf("%x %p %p\n",
       sizeof(struct test),
       a + 1,
       a - 1);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 指针算术 sizeof(struct) 的相关文章

随机推荐

  • NetworkCredential UseDefaultCredentials 不起作用

    我们很久以前就编写了一段代码来使用域凭据调用服务 现在域已更改并计划使用默认 Windows 帐户 所以我试图通过配置重置 asmx web 服务的网络凭据 我创建了一个 SoapExtentsion 类并尝试覆盖那里 即使它执行该行 但它
  • 如何将数据从 Express 服务器传递到反应视图?

    我有一个简单的 Express 服务器 连接到 orientdb 数据库 我需要将信息从 Express 传递到 React 视图 例如 在快递中我有 router get function req res next Vertex getF
  • 创建新Socket时添加超时

    我有一个带有 DHCP 的本地网络和几台 PC 其中之一应该是我的服务器 并自动连接到所有其他服务器 客户端 我的想法是这样的 首先 我在每个客户端 CServer 上创建一个服务器 用于侦听来自服务器 SClient 的客户端程序 当SC
  • java.net.SocketException:软件导致连接中止:recv 失败

    我无法找到以下错误的确切含义的适当答案 java net SocketException Software caused connection abort recv failed Notes 这种错误很少发生且不可预测 尽管出现此错误意味着
  • 在 Angularfire2 中“加入”Firebase 查询

    Update 我遇到的空值字段问题与数据库中不存在的键有关 因此这里的大部分讨论不适用于您的问题 如果您正在寻找一种在 AngularFire2 中 加入 查询的方法 下面接受的答案可以很好地做到这一点 我目前正在使用combineLate
  • 如何从AWS lambda java中的类路径加载属性文件

    我编写了 AWS lambda 函数 因为我想从属性文件和类路径中读取数据库连接详细信息 但我无法加载该文件 这是我的代码 InputStream input DBConfiguartion class getResourceAsStrea
  • 返回无效(0);与返回;中断功能[重复]

    这个问题在这里已经有答案了 我遇到了一些中断函数的代码return void 0 我相信这将被用来返回undefined但这可以简单地通过写来完成return Does return void 0 有一个额外的目的 或者这只是中断函数的两种
  • 使用 Azure Functions 3.0 中的属性将 Enum 序列化为字符串

    我尝试在 Azure Functions 3 0 3 1 应用程序中获取 HTTP 触发器来返回枚举的字符串表示形式 但没有任何运气 我已经尝试过 Core 3 0 和 Core 3 1 给定这个类 public enum TestEnum
  • SharedPreferences 何时被删除?

    SharedPreferences 类允许以简单类型 布尔值 字符串等 格式保存应用程序数据 通常它们不会被删除 并且应该持续存在 但是在更新 删除应用程序或清除应用程序缓存等情况下它们是否会被删除 当你这样做时clear data从设备应
  • 使用 SqlBulkCopy 时如何检索服务器生成的标识值

    我知道我可以通过不指定身份列来批量插入到我的表中SqlBulkCopyOptions KeepIdentity如上所述here 我希望能够做的是获取服务器生成的标识值并将它们放入我的数据表 甚至列表中 我看见this发布 但我希望我的代码是
  • SQL Server 加入顺序

    我在输入中有 2 个字符串 例如 1 5 6 和 2 89 9 具有相同数量的元素 3 或以上 我想要的那两个字符串作为 纵坐标连接 1 2 5 89 6 9 我想分配一个行号并在 2 个结果集之间进行连接 SELECT a item b
  • 在 Java 中如何确定区域设置使用 12 小时还是 24 小时时间?

    在Java中 我只想打印一天中的时间 以小时和分钟为单位 并希望它根据区域设置在 13 00 和 1 00 PM 之间正确切换 我该怎么做呢 区域设置未明确指定首选 12 小时时间格式还是 24 小时时间格式 相反 区域设置特定的日期格式由
  • 将整数转换为 MIPS 中的双精度数

    我想将其中的两个值相除 tn寄存器 我必须将这两个值相除才能得到双倍结果 但是该函数div只返回该除法的整数部分有人可以帮忙吗 我需要转换吗 t1 and t2 to f0 and f2 我怎么做 li t1 2 li t2 5 div f
  • hbm.xml 中映射的属性可以是暂时的吗?

    假设我有一个User像这样的实体 class User private String login transient private String hashedPassword 我永远不想转移hashedPassword给客户 所以我把它变
  • 控制 Android 上的用户语言

    我有一个多语言应用程序 我想让用户能够控制使用哪种语言 这意味着即使他有英语区域设置 如果他愿意 他也可以使用不同的语言 如何更改区域设置语言 每个应用程序 Android 不提供更改应用程序区域设置的方法 它是在全系统一级完成的 我认为这
  • 如何调试缓慢的 Office 应用程序互操作构造函数?

    我有一个处理 Excel 的应用程序 最近我遇到了创建 Excel 对象非常慢的问题 我用这个简单的代码重新创建了这个问题 Microsoft Office Interop Excel Application xlApp xlApp new
  • 使用值绑定分配的依赖属性不起作用

    我有一个带有依赖属性的用户控件 public sealed partial class PenMenu UserControl INotifyPropertyChanged public event PropertyChangedEvent
  • 一组元素中具有最大高度的元素

    我有一套div元素 在jQuery 我希望能够找出div最大高度以及该高度div 例如 div div class panel Line 1 Line 2 div div class panel Line 1 br Line 2 br Li
  • 将数据框转换为每月时间序列

    我有一个 100 年每月数据 1200 个数据点 的数据框 其中月份在列中 年份在行中 我想将其转换为每月的时间序列 并且我尝试了多种方法 但没有一种方法可以创建正确的 时间 结构 问题在于 R 将数据框视为 12 个变量 月份 的 100
  • C 指针算术 sizeof(struct)

    这是有问题的代码 include