const常量的问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 14:27:39
如下代码:
const a=2;
int *p;
p=(int *)&a;
*p=1;
cout<<a<<" "<<*p<<endl;
输出竟是2 1;谁解释一下?
在内存中a地址中内容的确被改,但输出时总是原值...
我少写了个int.是 const int a=2;
我就是看直接改不行,好不容易才想到的办法.我查看内存发现a地址里的内容确实被改掉了.但a的值却就是不变,那a的值到底存在哪啊?还是用的宏定义替换的方法?
我以前这么作过:
int a=2;const int *p=&a;int *q;q=(int*)p;*q=1;
然后输出*p是1啊 .

我来解释下把,算了,直接给你写个程序让你看看把
const int a=20;
const int *p=&a;
与下面的对比
const int a=20;
int *p=&a;

现在来说一下,两种情况,a都是常量,所以不管在哪一种情况下
a的值都不会改变的,而对于两个指针变量,就不相同了,一个是const指针
而另外一个是非const指针,也就是说对于const指针的那种情况,其指针变量p的值与其指向的内容a都不可改变,因为他们都是const修饰的,而对于非const指针,则表示其指针变量p的值是可以改变的,但是其指针变量所指向的内容a依然是不可以改变的,所以你再看看你的那个程序了

const a=2; //你没加类型难道编译器没报错?
int *p;
p=(int *)&a; //这里要注意啊,&a的类型是const int*,而p是int*的,你在这里进行的类型的强制转换,将const int*转换成了int*,否则不能赋值的
*p=1;
cout<<a<<" "<<*p<<endl;
你可以对比下下面的程序
#include <iostream>
using namespace std;
int main()
{
const int a=2;
int *p;
p=&a; //会报错
*p=1;
cout<<a<<" "<<*p<<endl;
}

下面的

#include <iostream>
using namespace std;
int main()
{
const int a=2;
int *p;
p=(int*)&a; //不会报错
*p=1;
cout<&l