reinterpret_cast加上指针的一道程序题,如下
#include<iostream>usingnamespacestd;intmain(){doublearr[]={1,2,3};int*p=reinterpret_c...
#include <iostream>
using namespace std;
int main(){
double arr[]={1,2,3};
int *p=reinterpret_cast<int *>(&arr[0]);
*p=6;
cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<endl;
return 0;
}
为什么结果总是:1,2,3
谢谢!
怎样才能正确地输出6,2,3? 展开
using namespace std;
int main(){
double arr[]={1,2,3};
int *p=reinterpret_cast<int *>(&arr[0]);
*p=6;
cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<endl;
return 0;
}
为什么结果总是:1,2,3
谢谢!
怎样才能正确地输出6,2,3? 展开
展开全部
double arr[]={1,2,3};
int *p=reinterpret_cast<int *>(&arr[0]);
*p=6;
cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<endl;
cout << *p << endl ;
*p = 6,因为p是整形指针, 所以用16进制码来操作p指向内存, 所以*p = arr[ 0 ] = 0x0000 0110 = 6
cout << arr[0] 因为arr是浮点指针,所以使用IEEE754编码来解释该内存数据,
因为0x0000 0110 = 1.00000000000003
而cout流默认只打印6个小数点有效位, 所以打印1
int *p=reinterpret_cast<int *>(&arr[0]);
*p=6;
cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<endl;
cout << *p << endl ;
*p = 6,因为p是整形指针, 所以用16进制码来操作p指向内存, 所以*p = arr[ 0 ] = 0x0000 0110 = 6
cout << arr[0] 因为arr是浮点指针,所以使用IEEE754编码来解释该内存数据,
因为0x0000 0110 = 1.00000000000003
而cout流默认只打印6个小数点有效位, 所以打印1
展开全部
不知道你清楚你在做什么没有,double 在内存中占8个字节的,采用IEEE754标准存储。你的代码相当于是直接改了double 的 末 4个字节为 00 00 00 06 ,实际效果是会得到一个近似1的小数,但比1稍大一点。因为默认只保留6位小数位,所以显示出来还是1而已。
想通过这样的方法得到6,是不可能的。
可以考虑如下的做法,不过我只是在凑数据而已,这样做没意义
*(p + 1) = 0x418;
想通过这样的方法得到6,是不可能的。
可以考虑如下的做法,不过我只是在凑数据而已,这样做没意义
*(p + 1) = 0x418;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询