指针与整数之间的转换
现代机器上,指针的长度一般等于 CPU 运行模式的寻址位数,在 32 位操作系统上为 4 字节,在 64 位操作系统上为 8 字节;而整数长度在 32 位和 64 位操作系统上一般都为 4 字节。因此将指针与整形相互转换时,务必考虑对 32 位及 64 位操作系统的兼容性。
- 将整数转换为指针
由于指针的长度一般大于或等于整形的长度,因此直接强制类型转换就可以了:
1 2 | int i; void *p = reinterpret_cast<void *>(i); |
- 将指针转换为整数
使用 uintptr_t 或 intptr_t 类型。这两种类型定义在头文件 <stdint.h> 中。
1 2 3 4 | // C++11 version #include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p); |
1 2 3 4 | // C99 version #include <stdint.h> void *p; uintptr_t i = (uintptr_t)p; // C Version |