const指针问题

[复制链接]
查看11 | 回复1 | 2009-4-20 20:04:34 | 显示全部楼层 |阅读模式
#include
using namespace std;
int main()
{
const int a=5;
const int *p=&a;
int *p1=(int*)p;
*p1=4;
cout<<"*p1="<<*p1<<endl;//这个值被修改了
cout<<"*p="<<*p<<endl;//这个也被修改了
cout<<"a="<<a<<endl;//这个还是5
return 0;
}
为什么都是指向同一地址,而最后那个a还是5
望高手赐教!

回复

使用道具 举报

千问 | 2009-4-20 20:04:34 | 显示全部楼层
对于const 常量的理解,有两个方面:(1)对于基本数据类型的const常量,编译器会重新在内存中创建它的一个拷贝,你通过其地址访问到的就是这个拷贝而非原始符号常量;(就是你的情况,所以你的想象“都是指向同一地址”是不成立的,其实并非指向同一地址)(2)然而,对于构造类型的const常量,则由于没有这样的一个拷贝,则可以绕过编译器的静态类型安全检查机制,可以在运行时修改其内存单元。如下例:#includeusing namespace std;class Integer{public: long m;};void main(){const Integer A;A.m = 10...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行