向地址添加1会导致向该地址添加0xE0

问题描述 投票:0回答:1

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

Offset 0

Offset 1

Offset 2

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

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

在第二行,我希望在第一个屏幕截图中看到0x00000255ef9bed58,在第二个屏幕截图中看到0x00000255ef9bed59,在最后一个屏幕中看到0x00000255ef9bed5a

c++ c memory memory-address
1个回答
0
投票

给出t* my_ptr = get_a_pointer_somehow();int my_num = get_a_number_somehow();,当您执行my_ptr += my_num时,它使指针前移my_numt,换句话说,将指针添加my_num * sizeof(t)字节。如果您不希望这种行为,请先将指针强制转换为char*,因为sizeof(char)始终为1。

© www.soinside.com 2019 - 2024. All rights reserved.