69,373
社区成员
发帖
与我相关
我的任务
分享
void main()
{
int k=1;
int *f = &k;
*(float *)(f) = 2;
printf("%f ",*f);
}
这个程序一直输出 0, 问题并不在转换上, 而是在输出上.
printf("%f" 是要从参数里读 8 个字节, float 类型传参数的时候会转换成 double 来传 8 个字节. 但是你传的是 int 还是只有 4 个字节, 所以导致没能输出. 你像 printf 传 8 个字节作为 "%f" 就可以看到结果位 2 了:
void main()
{
int k=1;
int *f = &k;
*(float *)(f) = 2;
printf("%f ", 0, *f);
}
有了上面的东西, 下面的就好解释了, 你多加了个参数, %f 就可以输出了.