如何以整数存储内存地址?

Coo*_*kie 5 c++ void-pointers 32bit-64bit

这与在找到的问题标题完全相同- 我还想将一个内存地址存储在变量中 - 或者更确切地说,void*在变量中存储一个.但是,我宁愿将它存储在某种形式的int而不是a中string,因为我希望之后再将其转换回指针.

这是因为它是一个类的成员,我想用boost serialize序列化,如果我确实使用了一个void*,boost serialize可能会尝试存储指针所指向的内容,这在我看来不是很明智案件.

我需要32位和64位gcc和MSVC,所以基本上我想知道是否有一个内置的整数类型,它是同一平台上指针的大小.或者,我想我需要IFDEF自己的类型?

Fre*_*Foo 8

intptr_t并且uintptr_t是足以容纳a的整数类型void*.它们由C++ 11 in <cstdint>和C99 in.定义<stdint.h>

如果uintptr_t不可用,您可以尝试uintmax_t,在相同的标题或Boost中定义<boost/cstdint.hpp>.


Rio*_*iot 6

在C++中将对象的地址转换为整数类型(不使用C风格的强制类型转换)的一种方法是使用reinterpret_cast.保证能够保存其他答案中提到的指针地址的整数类型是uintptr_t.

uintptr_t myint = reinterpret_cast<uintptr_t>(&myobject)

要么

uintptr_t myint = reinterpret_cast<uintptr_t>(mypointer)