有两种不同的方式将const关键字用于指针:
第一种是指针指向一个常量对象,防止使用该指针修改所指向的值
第二种是将指针本身声明为常量,防止改变指针指向的位置。
1、 指向一个常量的指针
例如,声明一个指向常量的指针pt:
int age=23
const int*pt=&age
该声明指出,pt指向一个const int(这里为23),因此不能使用pt来修改这个值,即*pt的值为const,不能被修改:
*pt+=1 //不可行
但是pt的声明并不意味着它指向的值是一个常量,而只是意味着对pt而言这个值是常量,例如:pt指向age,而age不是const,可以直接通过age变量来修改age的值,但不能使用const指针来修改它:
*pt=20 //不可行
age=20 //可行
2、 将const变量的地址赋给指向const的指针是可行的,但将const的地址赋给常规指针是不可行的:
const int age=23
const int*pt=&age //可行
const int age=23
int*pt=&age //不可行
第一种情况禁止使用age来修改值23,也不能使用pt来修改
第二种情况不可行的原因是将常量age的地址赋值给pt。则可以使用pt来修改age的值,这就使得age的const状态很荒谬,因此C++禁止将const的地址赋给非const指针,如果非要这么做,只能使用强制转换来突破这种限制。