新人问问题
以下有三段程序,
第一输出:3,0。
第二输出:3,越界
第三输出:3,3
第一个我懂,
第二个不懂为什么会这样,
第三个不是float型的嘛,应该是3.0,3.0啊,怎么是3,3
一.
#include<iostream.h>
void main()
{
int i=3,j;
float *p;
p=(float *)&i;
cout<<i<<endl;
j=*p;
cout<<j<<endl;
}
二.
#include<iostream.h>
void main()
{
int i=3;
float j,*p;
p=(float *)&i;
cout<<i<<endl;
j=*p;
cout<<j<<endl;
}
三.
#include<iostream.h>
void main()
{
float i,j,*p;
p=&i;
cout<<i<<endl;
j=*p;
cout<<j<<endl;
}
问题点数:20、回复次数:3Top
1 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2005-11-07 11:30:22 得分 0
实际上就是对内存的同一数据
按不同格式进行解析.Top
2 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2005-11-07 11:37:40 得分 0
0011 1111 1000 0000 0000 0000 0000 0000
(0x3F800000)
按float类型解析为: 0.000000
按int类型解析为: 1065353216
1000 0000 0000 0000 (0x8000)
按unsigned short 解析为 32768
按signed short 解析为 -32768
就是这么简单的一回事.Top
3 楼wangjing1228(~啦啦~)回复于 2005-11-07 11:39:38 得分 20
二、p指向i的地址,但p代表指地址后的4个字节(假设int占2,float就占4)
i 10000,10001
p 10000,10001,10002,10003
知道10000 和100001的内容,不知道10002和10003的内容,所以j=*p的时候不知道结果会是多少Top




