#include <iostream>
using namespace std;
int main()
{
//cout << "Hello world!" << endl;
cout<<sizeof(int)<<" "<<sizeof(double)<<endl;
int arr[]={1,2,3};
double *p=reinterpret_cast<double*>(&arr[0]);//reinterpret_cast <new_type> (expression)
//reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。
//这里是将整型数组的地址强制赋值给一个双精度浮点型的指针
//*p=5;
cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<endl;//在未操作前,值显示正常,我们知道int型变量占用四个字节的空间,double型的变量占用八个字节的空间。
*p=5;//p是一个double类型的指针,若对*p进行操作,会更改8个字节的值,而此处p所指向的不是double类型的数组,而是int型的数组,因此会造成前两个整型变量的元素的值显示异常。
cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<endl;
return 0;
}
C++语言程序设计(第4版)习题6-29:运行下面的程序,观察执行结果,指出该程序是如何通过指针造成安全性隐患的,思考如何避免这种情况的发生。
最新推荐文章于 2023-01-25 11:58:03 发布