1. const int p;
2. const int *p;
3. int const* p;
4. int * const p;
5. const int * const p;
6. int const * const p;
最近学习的时候,发现对const指针十分的不解,特别看到下面的这六种写法就脑壳疼,所以特意写一下加深一下记忆。
首先我们来了解一下const的含义:
const指针是指针变量的值,一经初始化,就不可以改变指向,初始化是必要的。声明指针时,可以在类型前或后使用关键字const,也可在两个位置都使用。
定义形式:type *const 指针名称/const type *指针名称
在网上我看到了一种比较简单明了的办法去理解const。
从右往左读,遇到p就替换为“p is a”,遇到*就替换为“point to”,其余不变。
-
const int p ----------- p is a int const
p是一个int型常量 。 -
const int * p --------- p is a point to int const
p是一个指针,指向int型常量即p是一个int型常量的指针。 -
int const * p --------- p is a point to const int
与2相同 const int 和 int const 是一样的意思。 -
int * const p --------- p is a const point to int
p是一个指向int的const指针。 -
const int * const p ------- p is a const point to int const
p是一个指向int型常量的const指针。 -
int const * const p ------- p is a const point to const int
与5相同,理由同2和3。
以上是六种不同定义的区分,下面来看一下这六种定义的含义。
const double x = 1; //x是一个常量,不能改变它的值
const double *y = &x; //普通的double指针不能指向常量,
所以需要const
*y = 2; //错误,该操作试图改变所指对象的值。不能给*y赋值,
即不能改变指针所指对象的值。
cout << y<< endl;//输出y的值
//虽然不能改变其所指对象的值,但是它可以指向别的常量对象
//这样的话 指针的值(也就是存放在指针中的那个地址)也会改变 比如:
cosnt double x2 = 3;
*y = &x2; // *y变成3;
cout << y << endl; //cptr的值变了
const指针表示指针本身是一个常量。由于指针是对象,因此就像其他对象一样,允许把指针本身定为常量。cosnt指针必须初始化,并且一旦初始化,const指针的值就不能改变了。const指针的值到底是什么?其实就是存放在指针中的地址,这个地址是一个对象的地址。
写完这个博客感觉我对const的理解加深了,最重要的是加深了对它的记忆。