首先,我也不知道这个标题提到的两个名词叫的对不对,不过暂时先这么叫吧。这里的const指针我指的是类似于int *const p
这样声明的变量,指向const类型的指针是类似于const int* p
这样声明的变量。
然后再说一下两者的区别吧。前一种,指针指向的内容可以通过指针变量改变,但是指针变量本身的值不能被改变;后一种,指针指向的内容不可以通过指针变量改变,但是指针变量本身的值可以改变。此外要说明的是,const int* p
可以指向非const类型的变量,而const类型的变量一定要用const int*
来指向。
最后给出测试的代码:
#include <iostream>
using namespace std;
int main(){
int i = 10, j = 100;
const int *p1 = &i;
int *const p2 = &i;
//通过指针改变所指对象的值
//*p1 = 1; error C3892: “p1”: 不能给常量赋值
*p2 = 1;
cout<<i<<endl;
//改变指针变量的值
p1 = &j;
//p2 = &j; error C3892: “p2”: 不能给常量赋值
cout<<*p1<<endl;
system("PAUSE");
return 0;
}
此外,我之所以能够知道这两者的区别是因为看了这篇博客,特此声明。