免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1435 | 回复: 2

指针强制转换后怎么是这个结果? [复制链接]

论坛徽章:
0
发表于 2006-08-26 11:12 |显示全部楼层
#include<iostream.h>

void main(void)
{
        int i,*p1;
        float *p2;               
        i=10;
        p1=&i;
        p2=(float*)p1;
        outfile<<"*p1="<<*p1<<endl;
        outfile<<"*p2="<<*p2<<endl;
}

得到的结果是:
*p1=10
*p2=1.4013e-044

*P2也应该是10啊

论坛徽章:
0
发表于 2006-08-26 11:17 |显示全部楼层
那说明你的机器中1.4013e-044和整数10的表示成2进制是一样的,呵呵

论坛徽章:
0
发表于 2006-08-26 12:02 |显示全部楼层
对于同一个二进制序列分别 解释 为不同的类型时其值不一定相等。

程序中分别对于指向同一地址的不同类型的指针进行间接操作其实就是对这一地址开始的内存 解释 为不同的类型。除此之外,强制类型转换如果是引用的话也是一种解释(如 (float&)i),结果和上面的类似;除了引用之外其它的强制类型转化不是上面所说的解释,而是数学意义上的值转换——值保持不变或者近似。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP