我尝试使用&
运算符为我添加的地址添加偏移量时遇到了一个非常奇怪的行为。因此,当我尝试向该地址添加任何数字时,结果是地址加上我的数字乘以0xE0
(224)。
这些是Visual Studio中监视列表的屏幕截图。每个屏幕截图的第一行是对我对象地址的访问,这是正确的。第二行是相同的访问,但是我们向其中添加了变量offset。第三行只是偏移量本身。
如您所见,在第一个屏幕截图上一切都很好。但是在第二个上,加法是0xE0
(0xE38-0xD58=0x0E0
),而不是应有的1。在最后一个屏幕截图中,添加的是0x1C0
,即2*0xE0
。
在第二行,我希望在第一个屏幕截图中看到0x00000255ef9bed58
,在第二个屏幕截图中看到0x00000255ef9bed59
,在最后一个屏幕中看到0x00000255ef9bed5a
。
给出t* my_ptr = get_a_pointer_somehow();
和int my_num = get_a_number_somehow();
,当您执行my_ptr += my_num
时,它使指针前移my_num
的t
,换句话说,将指针添加my_num * sizeof(t)
字节。如果您不希望这种行为,请先将指针强制转换为char*
,因为sizeof(char)
始终为1。