指针本身和指针所指向的内容都有一个“值”,二者的 const 属性需要分别讨论。
常量的指针
根据我的理解,我把 const *
读成“常量的指针”(const 在左边所以先读,*在右边所以后读),这表示这个指针指向的内容不能通过这个指针修改。需要补充的是:虽然我把const *
读成“常量的指针”,但并不是说它不能指向变量。
int i = 10;
int const * p = &i; // OK
*p = 20; // 编译错误,*p是只读对象
指针常量
*
在左边,const
在右边,所以我把它读成“指针常量”,表示这个指针不能被修改(初始化过后就不能修改它的值使其指向其他东西)
#include <iostream>
int main()
{
int i = 10;
int * const p = &i;
*p = 20; // OK
int n = 30;
p = &n; // 编译错误,p是只读对象
return 0;
}