c++ - 将 1 添加到地址会导致将 0xE0 添加到该地址
问题描述
在尝试向使用运算符获得的地址添加偏移量时,我遇到了一个非常奇怪的行为&
。因此,当我尝试向该地址添加任何数字时,结果是该地址加上我的数字乘以0xE0
(224)。
这些是 Visual Studio 中监视列表的屏幕截图。每个截图的第一行是我的对象的地址的访问,这是正确的。第二行是相同的访问,但我们将变量偏移量添加到它。第三行只是偏移量本身。
如您所见,第一个屏幕截图上的一切都很好。但是在第二个中,加法是0xE0
( 0xE38-0xD58=0x0E0
) 而不是应该的 1。在最后一个屏幕截图中,添加的0x1C0
是2*0xE0
.
在第二行,我预计会0x00000255ef9bed58
在第一个屏幕截图、0x00000255ef9bed59
第二个屏幕截图和0x00000255ef9bed5a
最后一个屏幕截图中看到。
解决方案
指针不是整数。指针算术不同于整数算术。给指针加 1 并不意味着“给我相邻地址”。给指针加 1 意味着“给我数组中相邻对象的地址”。相邻对象之间的距离与对象的大小相同。如果该大小大于一个字节,则相邻对象距离几个字节。
在这种情况下,如果您的计算正确,则指向对象的大小为 0xE0 字节。
推荐阅读
- php - 如何使用 php 代码在 WHM/Cpanel 中以编程方式创建数据库?
- c - C中原始类型的位
- neural-network - 如何使用进化算法创建适当的前馈神经网络
- c# - 如果抛出异常,.Net Web API 有时根本不返回任何响应
- powershell - 使用 Search-ADAccount 查找所有未设置帐户到期日期的帐户
- c++ - 在 C++ 中实现地图矢量
- angular7 - 存储哪个树节点是展开 mat-tree 嵌套的?
- excel - 如何计算范围参数中的项目数?
- excel - 从Excel中一系列单元格中以逗号分隔的一组数字中计算特定数字
- python - 如何统一使用 TensorFlow python 项目,然后可以构建到 iOS