【发布时间】:2016-12-13 21:40:47
【问题描述】:
我正在构建一个八叉树数据结构,为了为最终节点节省内存,我希望将值直接存储在指针中,而不必创建一个可容纳 8 个子节点的对象。
我的数据类型是 uint32_t,这意味着指针有足够的位来保存它在 x86 或 amd64 上。
那么如何将无符号 32 位整数存储在 x86 或 amd64 指针中?
伪代码:
uint32_t i = 123;
Octree* ptr = i;
uint32_t ii = ptr;
std::cout << ii << std::endl; //Prints 123
这怎么可能?
【问题讨论】:
-
uint32_t i = 123; Octtree* ptr = reinterpret_cast
(i); uint32_t ii = reinterpret_cast (ptr); -
@FamZ:虽然在 x86 上应该可以工作,但在技术上它是非法的,有一些奇怪的平台会导致崩溃(甚至只是 引用 i> 指向无效指针会在这些 CPU 上触发硬件异常)。
标签: c++ pointers casting unsigned-integer