const与指针:
const与指针有两种不同的搭配方法:
指向const的指针:
让指针指向一个常量对象,这样可以防止使用该指针来修改所指向的值。如:
int age = 39;
const int * pt = &age;//pt指向一个const int,因此不能使用pt来修改其值。
//换句话说,*pt的值为const,不能被修改
//因此,下面两个做法是非法的:
*pt += 10;
cin >> *pt;
有趣的是,指针的这种声明并不代表它所指向的值就是一个不可改变的常量,只是说明对pt而言,这个值是一个常量,不可以通过pt来修改该变量,但却可以通过age变量来直接修改age的值:
*pt = 30;//错误
age = 30;//正确
另外,由于搭配的多样性,可能会有以下问题:
const的指针可以指向const变量的地址吗?
非const的指针可以指向const变量的地址吗?
对于第一个问题,答案是肯定的。因为const变量本身就不希望其值被修改,const指针恰恰符合了它的目的。
而对于第二个问题,答案是否定的,因为如果可以,将可以通过指针的方式修改const变量的值,而这与const变量的初衷相违背。
当然,还需要指出的一点是:可以将非const指针的值赋给const指针,但是不可以将const指针的值赋给非const指针。
const指针:
将指针本身声明为常量,这样可以防止改变指针指向的位置。如:
int sot = 3;
int * const pt = &sot;
这样,pt只能指向sot这个变量,而无法指向其他变量,但是通过pt来改变sot的值的行为是合法的。