#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