指针式铸造

时间:2014-01-01 07:22:51

标签: c

以下代码的输出为0.0000。代码中发生了什么以及为什么输出为0.0000或者在我们输入int*float*并打印取消引用的值时精确地询问会发生什么?在下面的代码?

int main(){
   int i = 10;
   int *p = &i;
   printf("%f\n", *(float*)p);
   return 0;
}

2 个答案:

答案 0 :(得分:4)

你的意思是?

printf("%f\n", (float)*p);

编辑:在您澄清问题之后。

如果您尝试将Int*转换为float*,则会有未定义的行为。指针是一个地址,而int float以不同的格式存储在内存中。所以你不能施展它。

答案 1 :(得分:1)

指针始终保存内存地址,即16位或32位。你基本上是类型转换Memory address这是不寻常的行为。 解决问题取决于你想要实现的目标。