常量指针和指向常量的指针
最近读c++ primer,学了指针和常量的复合使用,在百度的面试里也见过
1.常量指针(const point)
即指针本身是个常量,指向的地址不变
const离变量更近,相比于*,从右往左读
如 int * const p
,顶层const(本身不变)
2.指向常量的指针(point to const)
即指针指向的对象,是个“常量”(这里的意思,不能通过指针修改所指对象的值,但能通过其他方式修改)
*离变量更近,相比于const,从右往左读
如 int const * p
,底层const(本身可变,指向对象不变)
3.举例
#include<iostream>
using namespace std;
int main(){
int a[2]={1,2};
const int *p_t_c=&a[0];
int * const cp=&a[0];
cout<<a[0]<<endl; //1
cout<<*p_t_c<<endl; //1
cout<<*cp<<endl; //1
// cp = cp+1; // 此处错误,不能修改
// cout<<*cp<<endl;
p_t_c += 1; // 可以修改
cout<<*p_t_c<<endl; //2
*cp = -1;
cout<<*cp<<endl;
// *p_t_c = -2; //错误,不能修改
a[1] = 3; //可以通过其他方式修改 p_t_c指向对象的值
cout<<*p_t_c<<endl; //3
return 0;
}
4.判断
从右往左读,看*和const的位置关系
遇到p就替换成“p is a ”遇到*就替换成“point to”。
const int p; // 常量
const int* p; // p is a point to int const
int const* p; // p is a point to const int
int * const p;// p is a const point to int
const int * const p;// p is a const point to int const
int const * const p;// p is a const point to int const