c++ - 如何将内存地址存储为整数?

标签 c++ 32bit-64bit void-pointers

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

这是因为它是我想用 boost serialize 序列化的类的成员,如果我确实使用了 void*,boost serialize 可能会尝试存储指针是什么指向,这对我来说不是很明智。

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

最佳答案

intptr_tuintptr_t是足以容纳 void* 的整数类型.它们由 C++11 在 <cstdint> 中定义和 C99 在 <stdint.h>

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

关于c++ - 如何将内存地址存储为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235280/

相关文章:

c++ - 错误 : cannot convert Elem to Elem* for argument 1 to void addHead(Elem*, 元素 *)

c++ - 嵌套类是否获得外部类的友元关系?

MongoDB 假定 64 位系统——它是指硬件还是操作系统内核,或者两者兼而有之?

c# - 如果我的 C# AnyCPU 应用程序以 32 位 (WOW64) 运行,我如何以 64 位重新运行它?

c# - Windows 2k8服务器和32-> 64位C#应用程序迁移后非常奇怪的Oracle ORA-03113错误

C语言 : void *x = &x compiles and runs without declaring x beforehand

c - 为什么将 void 指针转换为 char 指针在这种情况下不起作用

c++ - 在 Mac 上使用/使用 boost::filesystem 连接文件路径时程序崩溃

c - 返回 main 时内存分配不是 "hold"

c++ - QtScript——通过 C++ 端实现的脚本端回调