将代码迁移到 64 位计算机时,有必要解决与指针转换相关的问题。在带有 void 参数的函数中,如果参数在函数内被转换为适当的类型,则可能会出现以下错误:“从 'void' 转换为 'int' 会丢失精度。”
为了解决此问题并确保跨 32 位和 64 位机器的兼容性,建议使用以下 C 11 方法:
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
std::uintptr_t 类型专门设计用于表示指针值和地址。使用reinterpret_cast 可确保 void* 指针和整数表示之间的安全且显式的转换。
C 11(及更高版本)版本:
#include <cstdint> std::uintptr_t i;
C 03 版本:
extern "C" { #include <stdint.h> } uintptr_t i;
C99 版本:
#include <stdint.h> uintptr_t i;
需要注意的是,虽然 uintptr_t提供了一种将指针值存储为整数的安全方法,它不一定在所有情况下都与整数的大小对齐。因此,建议使用适当的类型来存储和操作整数值。
以上是如何在现代 C 中安全地将指针转换为整数?的详细内容。更多信息请关注PHP中文网其他相关文章!