修改const的问题的解释那个对?

来源:百度知道 编辑:UC知道 时间:2024/05/28 12:04:44
#include <iostream>
using namespace std;
int main()
{
const int a=5;
int *p=const_cast<int*>(&a);
cout<<"a="<<a<<" "<<"*p="<<*p<<endl;
cout<<"&a="<<&a<<" "<<"p="<<p<<endl;
*p=10;
cout<<"a="<<a<<" "<<"*p="<<*p<<endl;
cout<<"&a="<<&a<<" "<<"p="<<p<<endl;
}

结果:
a=5 *p=5
&a=0012FF7C p=0012FF7C
a=5 *p=10
&a=0012FF7C p=0012FF7C

第一种解释:const常量与局部变量的存储区域是不同的,就象两个人,一个住3#楼的307室,一个住4#楼的307室,地址因此看起来一样.

第二种解释:编译器在编译cout<<"a="<<a<<" "<<"*p="<<*p<<endl;时,编译成cout<<"a="<<5<<" "<<"*p="<<*p<<end

个人认为是第二种。
还有,MSDN上说像这样p=const_cast<int*>(&a); 再往P里写入会导致无法预测的结果,不推荐这样做。

反汇编就是把可执行文件中的机器码翻译成汇编代码。