我正在尝试通过附加两个
我希望双指针也能使用地址
int
的二进制表示来创建一个double
。这是我现在的代码:int i = arc4random();
*(&i+1) = arc4random();
double d = *(double*)&i;
我希望双指针也能使用地址
&i+1
处的值,实际上确实如此。当我打印 i
和 *(&i+1)
的二进制表示并将它们与 d
的二进制表示进行比较时,可以发现 d 是通过附加 *(&i+1)
和 i
组成的。所以先出现了 *(&i+1)
?为什么会这样呢?
编辑:还要看一下 Juan Catalan 和 Mark Segal 的答案,了解使用联合执行我所做的操作的正确方式。
union
代替。你仍然可以生成NaN
,但不会有内存管理问题。 - Juan Catalansizeof(int)
必须确保它在您的架构中是double
大小的一半。 - Juan Catalan