1、常量指针:是指向常量的指针,由于本质上还是指针而非常量,因此指针的内容(地址)是可以修改的,但是指针指向的常量是不能被修改的!
int a = 1;
int b = 2;
int c = 3;
int const *p1 = &b; // const在前,p1为常量指针
int *const p2 = &c; // * 在前,p2为指针常量
//注意:允许将非const对象的地址赋给指向const对象的指针,所以第4行代码是正确的
//p1可以改变,但不能通过p1修改其指向的对象(即 b)的值;不过,通过其他方式修改b的值是允许的
p1 = &a; //正确,p1是常量指针,可以指向新的地址(即&a),即p1本身可以改变
*p1 = a; //错误,*p1是指针p1指向对象的值,不可以改变,因此不能对*p重新赋值
2、指针常量:意思是该指针为一个常量,因此该指针的内容(地址)是不能被修改的,而该指针指向的变量是可以被修改的
p2 = &a; //错误,p2是指针常量,本身不可以改变,因此将a的地址赋给p2是错误的
*p2 = a; //正确,p2指向的对象允许改变
3、如何简单记忆和区分二者:*表示指针,const表示常量,谁在前面先读谁:因此p1就是常量指针,p2就是指针常量;*表示地址,const表示指针指向的变量谁在前面,谁就不允许被修改:因此p1指向的变量为常量不允许被修改,p2指针的内容(地址)不允许被修改。