首页 > 解决方案 > 将 1 添加到地址会导致将 0xE0 添加到该地址

问题描述

在尝试向使用运算符获得的地址添加偏移量时,我遇到了一个非常奇怪的行为&。因此,当我尝试向该地址添加任何数字时,结果是该地址加上我的数字乘以0xE0(224)。

偏移量 0

偏移量 1

偏移量 2

这些是 Visual Studio 中监视列表的屏幕截图。每个截图的第一行是我的对象的地址的访问,这是正确的。第二行是相同的访问,但我们将变量偏移量添加到它。第三行只是偏移量本身。

如您所见,第一个屏幕截图上的一切都很好。但是在第二个中,加法是0xE0( 0xE38-0xD58=0x0E0) 而不是应该的 1。在最后一个屏幕截图中,添加的0x1C02*0xE0.

在第二行,我预计会0x00000255ef9bed58在第一个屏幕截图、0x00000255ef9bed59第二个屏幕截图和0x00000255ef9bed5a最后一个屏幕截图中看到。

标签: c++cmemorymemory-address

解决方案


指针不是整数。指针算术不同于整数算术。给指针加 1 并不意味着“给我相邻地址”。给指针加 1 意味着“给我数组中相邻对象的地址”。相邻对象之间的距离与对象的大小相同。如果该大小大于一个字节,则相邻对象距离几个字节。

在这种情况下,如果您的计算正确,则指向对象的大小为 0xE0 字节。


推荐阅读