在C++中,const关键字指定了一个不可修改的变量,并非常量。它可以使编译器帮助用户定义的某些变量不被意外的修改。指针也是变量,因此也可以将关键字用于指针。然而指针是一个特殊变量,包含内存地址,还可以修改内存中的数据。因此const指针有以下3种用法。
(1)、指针指向的地址是常量,不能修改,但可以修改指针指向的数据
int x=30;
int *const p=&x;//const作用的是指针变量本身
*p=40;//可修改指针p所指向地址的内容,此时输出x=40;
int y=20;
p=&y;//不能更改指针p所指向的地址
(2)、指针所指向的数据为常量,不能修改,但可以修改指针所指向的地址
int x=30;
const int *p=&x;//const作用的是指针变量所指向的数据
*p=40;//不能更改指针指向的数据
int y=20;
p=&y;//可以更改指针的地址
int *new_p=p;//注意:不能将常量指针赋值为非常量指针
通过1,2例子对比可以看出,当const在前时,其修饰的是指针所指向的内容,但指针本身是可变的;当const在后时,其修饰的是指针本身,但其指向的内容是可变的。
(3)、指针所指向的地址以及所指向的值都是常量,不能修改。
int x=30;
const int * const p=&x;
*p=40;//不能修改指针所指向的数据
int y=20;
p=&y;//不能修改指针的地址
有时需要禁止通过引用修改它所指向的变量的值,为此可在声明引用变量时使用关键字const
int x=30;
const int &p=x;//用关键字const声明引用变量p
p=15;//报错,不能修改p的值
报错
[Error] assignment of read-only reference 'p'