#include<stdio.h>
void print(void* p)
{
printf("%f",*(float*)p);
}
void main()
{
int p=10;
print(&p);
}
运行结果是0.0000000
假如改为
void print(void* p)
{
printf("%d",*(int*)p);
}
则结果正确
为什么呢?强制转换只能转换成和原来一样的类型?
解决方案
5
卧槽,还以为是C++,原来是C,C类型不安全,lz多多小心即可
5
1#正解,IEEE标准定义了float的内存布局
参考 深入理解计算机系统 第二章 – 浮点型
参考 深入理解计算机系统 第二章 – 浮点型
15
假如int转float ,结果将是10.0f
但你的是int*转float*,是指针类型的转换,这将导致用float的格式去解释内存中的数据
而浮点数在内存中的存储形式与整数是不同的
参看:http://blog.csdn.net/richerg85/article/details/20456969
但你的是int*转float*,是指针类型的转换,这将导致用float的格式去解释内存中的数据
而浮点数在内存中的存储形式与整数是不同的
参看:http://blog.csdn.net/richerg85/article/details/20456969
5
10
你这是对内存以不同的形式重新解释,而不是值转换。而且没必要搞个函数吧:
int i = 10;
printf("%f\n", i); // 0.0
printf("%f\n", *(float *)&i); // 0.0 (同上)
printf("%f\n", (float)i); // 10.0