以前就看到过说C里面用const声明的变量其实是可以用指针去修改的,今天在C++用实验了一下,发现有点问题
#include <iostream>
using namespace std;
int main()
{
const int a=20;
const int *p=&a;
int *p2=(int *)p;//const_cast<int *>(p);
cout<<"&a="<<&a<<"\t"<<"a="<<a<<endl;
cout<<"p="<<p<<"\t"<<"*p="<<*p<<endl;
cout<<"p2="<<p2<<"\t"<<"*p2="<<*p2<<endl;
*p2=30;
cout<<"&a="<<&a<<"\t"<<"a="<<a<<endl;
cout<<"p="<<p<<"\t"<<"*p="<<*p<<endl;
cout<<"p2="<<p2<<"\t"<<"*p2="<<*p2<<endl;
return 0;
}
输出结果为
&a=0x22ff04 a=20
p=0x22ff04 *p=20
p2=0x22ff04 *p2=20
&a=0x22ff04 a=20
p=0x22ff04 *p=30
p2=0x22ff04 *p2=30
发现两个指针指向的值都改变了,但是变量a的值没有变,而三个的地址又相同,不明白。。。。。。
然后用C试了一下:
#include <stdio.h>
int main()
{
const int a=20;
const int *p=&a;
int *p2=(int *)(p);
printf("%p %p %p %d %d %d\n",&a,p,p2,a,*p,*p2);
*p2=30;
printf("%p %p %p %d %d %d\n",&a,p,p2,a,*p,*p2);
return 0;
}
执行结果为:
0x22ff14 0x22ff14 0x22ff14 20 20 20
0x22ff14 0x22ff14 0x22ff14 30 30 30
这里就跟以前看到说的一样,a的被改变了。。。。
为什么同样的代码在C和C++中不同呢???不明白。。。。。。。。