在讨论常量指针和指向常量对象的指针之前,必须先明确什么是指针
指针
指针(pointer)是对数据对象或函数的一种引用;
指针代表了一个对象或函数的地址和类型;
被声明的指针(名称)也是一个对象。
int var = 8848;
int* ptr = &var;
ptr 是指向变量 var 的 int 型指针对象
常量指针和指向常量对象的指针
常量指针
定义常量指针时,必须初始化该指针,因为以后不能修改它的值。
int var = 8848;
int var_c = 8086;
int* const ptr = &var;
*ptr = 1024; //OK
ptr = &var_c; // Error: assignment of read-only variable 'ptr'.
// prt被const修饰,是一个常量指针,是只读的
第三行的const后紧跟指针ptr,这个const是修饰ptr这个对象的,称ptr是一个常量指针。
指向常量对象的指针
int var = 8848;
int var_c = 8086;
int const * ptr; // 与下一行是等价的
const int* ptr; // 与上一行是等价的
ptr = &var_c; // OK
*ptr = 1024; // Error
上述例子中的const修饰的是*ptr,所以*prt是只读的。但是ptr才是指针对象,ptr并不是一个常量。
小结
常量指针(指向某对象的常量指针),强调指针本身是一个常量。
指向常量对象的指针,强调指针指向的对象是一个常量。
当然也有指向常量对象的常量指针(const int* const prt = &var;)