关于void*强制转换的问题

C语言 码拜 9年前 (2016-04-21) 1629次浏览
#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

引用:

新手多用static_cast,禁止用C风格转换,少用reinterpret_cast

卧槽,还以为是C++,原来是C,C类型不安全,lz多多小心即可

5

1#正解,IEEE标准定义了float的内存布局
参考 深入理解计算机系统 第二章 – 浮点型

15

假如int转float ,结果将是10.0f
但你的是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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于void*强制转换的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)