首先,指针常量与常量指针中存放的都是地址,明白这一点后更便于理解。
1、常量指针(const修饰指向的值)
常量指针指向常量,不可修改,但指针本身指向何处可以修改。
int a = 10;
int b = 20;
const int* p = &a;//常量指针,指向常量a
cout << p << endl;//输出结果为a的地址
cout << *p << endl;//输出结果为a的值
*p = 20;//错误,指向的值不可修改
p = &b;//正确,指向何处可以修改
int 表明了指针指向地址中存放的变量类型,const放在int前表明存放值为常量。
2、指针常量(const修饰指针本身)
指针存放地址为常量,指向何处不可修改,地址中存放的值可以修改。
int *const p2 = &a;//指针常量
*p2 = 20;//正确,指向的值可以修改
p2 = &b;//错误,指针的指向作为常量不可修改
p2存放地址,const位于p2前,修饰指针p2本身,表明存放的地址不可修改。
3、const既修饰指针又修饰指向的值
指向的值与指向何处均不可修改。
const int * const p3 = &a;
p3 = &b;//错误
*p3 = 20;//错误