在C++中是可以在指针类型中使用const限定符的,但是限定符的位置不同会导致语义产生很大区别,可以通过以下例子来看出:
const int *p1;
int * const p2;
在这两个语句中,不一样的就是const的位置,会导致什么样的区别呢?
p1指向的值不能改变 等价于 不能通过p1改变i1中存的值,也就是说对p1进行如下操作是错误的
const int *p1 = 10;
p1 = &a ;
p1 = 20; //error:不能改变const 指针的值
但是对i1的操作不会产生错误,因为i1是整型变量
i1 = 10; //success
p2是的值可以改变,但是p2这个指针不能指向其他变量,也就是说对于p2的操作会得到下面的结果:
p2 = &j; //error:不能改变const指针的指向
p2 = 10; //success.
总结的来说:
const int *p1 = ; 这是一个整形常量指针,必须在声明的时候赋值,不能通过p1指针改变,但是可以通过i1改变。
int * const p2 = i2; 它指向的整数是可以改变的,但是p2这个指针只能指向i2,不能指向其他变量。