int const *p和int *const的区别
首先,我是来虚心学习的,希望大家指出我的错误!我用的是Visual C++。
一直都不太清楚int const *p和int *const的区别,在网上找大部分人都解释为:
int const *p中 *p指望的内容不可变,int *const p中p指向的地址不可变。
实例分析下:
#include<iostream.h>
void main()
{
int n=0;
int m=1;
const int *p1 = &n;
int * const p2 = &n;
cout<<*p1<<endl;
cout<<p2<<endl;
p1 = &m; //不能用(*P1=m),可以用(p1=&m)。否则出错。
cout<<(*p1)<<endl;
cout<<p1<<endl;
(*p2) = m; //不能用(p2=&m),可以用(*p2=m)。否则出错。
cout<<p2<<endl;
cout<<*p2<<endl;
}
从2行注释看的确如此。
可是,程序运行的结果为:
0
0x0012FF7C
1
0x0012FF78
0x0012FF7C
1
结果发现*p1的内容变了,由0变成了1。
*p2指向的地址没变 1代替了0原来在内存中的地址。
那么是不是用(p1=&m)能改变*p1的值,用(*p2=m)也不能改变p2的值(地址)呢?再看以下程序:
#include<iostream.h>
void main()
{
int a[]={1,2,3};
int b[]={5,6,7};
int const *p1=a;
int *const p2=b;
cout<<*p1<<endl;
cout<<p1<<endl;
cout<<p2<<endl;
p1++;
cout<<*p1<<endl;
cout<<p1<<endl;
*p2=b[1];
cout<<*p2<<endl;
cout<<p2<<endl;
}
运行发现*p1的值和p1的值都变了;
*p2的值变了,可p2的值不变。
那么是不是可以说:
int const *p只能阻止*p=m,这种语句的赋值,而不能保护*p的值不变。
int *condt p能阻止p=&m,这种语句的赋值,也能保护p的值不变。
求大家指点。