如何在C ++中偏移对象指示的内存位置

时间:2012-05-15 23:25:06

标签: c++

我在C#中实现了这个实现:

如果我没有错,它用于:通过大小字节数偏移allocateObject指示的内存位置,并将内存指针转换为Int64

short size = getSize();

IntPtr allocatedObject;

long posInMemory = allocatedObject.Offset(size).ToInt64();

如何在C ++中实现这一点:IntPtr(void *allocatedObject;)的内存位置并将内存指针转换为Int64。

提前致谢!

1 个答案:

答案 0 :(得分:2)

假设您有int64_t类型表示64位整数,您首先将指针强制转换为指向char的指针(根据定义具有sizeof = 1),然后将其偏移为大小,然后再次将其转换为指向int64_t的指针。

static_cast< int64_t* >( static_cast< char* >( allocatedObject ) + size )

那是因为你不能用void指针做指针算术,因为它没有大小。或者,您可以reinterpret_cast指向std::intptr_t(一个足以包含任何指针的整数)的指针,按大小增加它,然后转换为指向int64_t的指针。