向指针添加值时的奇怪行为

时间:2014-01-26 21:15:51

标签: c++

好吧,我其实不知道如何描述这个:

uintptr_t * ptr = (uintptr_t *) 0x21CC9004;

std::cout << ptr + 0x10 << std::endl;
std::cout << std::hex << 0x21CC9004 + 0x10 << std::endl;

第一行产生21CC9044,第二行产生21CC9014。

那是怎么回事?有人可以解释这个以及我如何向我的指针添加0x10以从第二行获得结果吗?

1 个答案:

答案 0 :(得分:1)

在第一种情况下,使用指针算术。这意味着添加0x10实际上将0x10 * sizeof(unsigned int)添加到指针的值,该值等于0x40,前提是sizeof(unsigned int)= 4。

在第二种情况下,通常有整数运算。