const 修饰指针
const 修饰指针有以下三种情况:
- A:const 关键字出现在 * 的左边:指针指向的内容不能被修改
- B:const 关键字出现在 * 的右边:指针本身不能被修改
- C:const 关键字出现在 * 的两边:指针指向的内容和指针本身都不能被修改
下面用一个实例解释说明三种情况的区别
#include <iostream>
using namespace std;
int main()
{
int a = 1;
int b;
// 指向const的指针,指针指向的内容不能被修改
const int *p1;
// const指针,指针本身不能被修改,必须初始化
int *const p2 = &a;
// 指针本身和它指向的内容都是不能被改变的所以也得初始化
const int* const p3 = &a;
p1 = &a; //T (指针本身的值可以改变)
*p1 = 8; //F (指针指向的内容不能被修改)
*p2 = 5; //T (指针指向的内容可以改变)
p2 = p1; //F (指针本身的值不能改变)
p3 = p2; //false(指针本身是不能被改变)
*p3 = 4; //false(指针指向的内容不能被改变)
return 0;
}
const 是 constant 的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。也就是说 const 意味着只读(readonly)
规则:const离谁近,谁就不能被修改
A
const int *p1;
//可以理解为
(const int) *p1;
此时 P
是指向 const int
和 int const
类型的指针,因此是指针指向的内容不能被修改
B
int *const p2 = &a;
//可以理解为
int *(const p2) = &a;
此时 const 是修饰 p,表示 p 是不可被修改的,p 是指针对象,因此指针是不可修改的
值得注意的:因为指针指向的内容不能改变,一旦声明之后就不能进行赋值操作,因此声明的同时必须初始化
C
容易看出第三种情况是前两种情况的结合,这里不做过多解释