在进行类型转换时,这意味着*(int *)& x是什么意思?

时间:2016-03-23 18:00:51

标签: c++ pointers

我正在查看地震中使用的反转sqrt的示例代码。

我看到一个float类型的变量:float x = 16;

然后int变量获取此表达式的值:int i = *(int*)&a;

我理解它的方式(从右到左)是它接受变量a的地址,将其转换为整数指针,然后获取该指针的值并将其赋值给{{ 1}}。

当我在控制台中输出变量i时,它是一个大整数值。 有人可以解释一下这里发生了什么事吗?

因为我希望变量ii

1 个答案:

答案 0 :(得分:10)

&aa的地址,浮点数; (int *)保持相同的地址,但现在告诉编译器假装int存储在那里; int i = *然后从该地址加载int

所以你得到一个与浮点数具有相同位模式的整数。浮点数和整数具有非常不同的编码,因此您最终会得到一个非常不同的值。

浮动很可能是like this,但不是必需的;您的架构可能会做其他事情。可能作者正在做一个特定于平台的优化版frexp

int i = (int)x;只会将float转换为int,为您提供16