前言:指针这方面的学习有所欠缺,自己就花了一点时间看了这一块,被这个const给难到了,今天参考了几个博客终于理解了一点点,在次做个小结。
对于指针而言,本质上存在两个可变项,一个是指针的指向地址,另一个是指向地址中存放的值。而const的作用就是对这两个可变项进行修饰,让其变成常量。
在位置上的区别是:
如果const在*的左侧,则const是用来修饰指针指向的变量,即指针指向的地址中存放的的值为常量;
如果const在*的右侧,则const是用来修饰指针本身,指针本身是常量,其指向固定。
所以大致可以有一下三种情况:
1、指向const对象的指针(const在*的左侧)
const double *pr;
double const *pr;//两种是一样的
/*正确的使用方法*/
const double a=3.14;
pr=&a;
/*错误的使用方法*/
double a=3.14;
pr=&a;
理解:pr是一个指针,指向了一个double类型的常量,指针指向可以发生改变,但是该地址内的值不能发生改变
图解:
2、const指针(const在*右侧)
int * const pr;
/*正确的使用方法*/
int a=6;
pr=&a;
a=10;
cout<<*pr;//输出结果为10,说明指向地址的值可以发生改变
/*错误的使用方法*/
int a=6;
int b=8;
pr=&a;
pr=&b;//这一步是绝对错误的,因为指针是常量,指向不能发生改变
理解:定义了一个常量指针,该指针指向了一个int类型的变量
图解:
3、指向const对象的const指针
const int * const pr;
//其用法比较固定,指向不能发生改变,指向地址的值不能发生改变
/*正确的使用方式*/
const int a=8;
pr=&a;
/*错误的使用方式*/
const int a=8;
const int b=9;
int c=2;
p=&a;//ok
p=&b;//error,指向不可变
p=&c;//同上
a=11;//error,a为常量
理解:定义了一个指向int类型常量的const指针。指针的指向不可发生改变,
图解:
以上,三种情况总结完毕。