总的来说,const 的作用就是数据保护,防止数据无意间被修改。
用法一:利用const 声明,让指针指向一个常量对象(常量对象的说法并不准确,但是很多教材都这么讲的,就先暂时这么用吧)
int age = 20;
const int * pt = &age; //将pt声明为指向const int的指针,这意味着通过pt只有读取age的权限,不能通过pt去修改age的值
*pt += 1; //Invalid, because pt points a const int
现在来看一个细节问题,上述声明的pt并不意味着他指向的对象是一个常量,而只是意味着 pt 没有修改该对象的权限,因为age是一个常规变量,完全可以在不通过pt操作age的情况下而改变age的值,所以说pt指向常量对象这种说法并不准确。
用法二:将指针本身声明为常量,这样可以防止改变指针指向的位置。
int age = 20;
int weight = 70;
int * const pt = &age; // 将pt本身声明为一个常量指针,指向age,以后就一直指向age,不能对pt赋值指向别的对象。
pt = &weight; //Invalid, because pt is a const pointer
当 pt 本身是一个常量指针的时候,虽然指针的值不能改变,但是可以通过 pt 去修改它所指向对象的值。比如说:假设上述 int 对象的地址为 1000,则 pt 被初始化为1000,并且 pt 的值一直为1000,不能被修改。但是可以通过 pt 修改 age 的值。
用法三:将前两种用法综合起来使用,声明一个指向常量对象的常量指针
const int age = 20;
const int * cosnt pt = &age;
此时,age是const对象,age的值永远是20不能改变,而 pt 是一个 const 指针,只能永远指向 age ,不能指向其他对象。