因为可以写成很多种方式,很容易记错,这里提供一种高效的方法。
从右边往左边读,遇到
变量名(p)
就替换成变量名 is a(p is a)
,遇到*
就替换成point to
一般会有这几种写法:
1. const int p
; 常量整数
2. const int * p
;
p is a point to int const
.
p
是一个指向整型常量的指针。
3. int const * p
;
p is a point to const int
.
p
是一个指向常量整型的指针。和2一样。
4.int * const p
;
p is a const point to int
.
p
是一个常量指针,指向整型。
5.const int * const p
;
p is a const point to int const
.
p
是一个常量指针,指向整型常量。
6.int const * const p
;
p is a const point to const int
.
p
是一个常量指针,指向常量整型。和5一样
常量指针:具有只能够读取内存中数据,却不能够修改内存中数据的属性的指针,称为指向常量的指针,简称常量指针。
声明:const int * p; int const * p;
ps:可以将一个常量的地址赋值给一个对应类型的常量指针,因为常量指针不能够通过指针修改内粗数据。只能防止通过指针引用修改内存中的数据,并不保护指针所指向的对象。
指针常量:是指指针所指向的位置不能改变,即指针本身是一个常量,但是指针所指向的内容可以改变。
声明:int * const p=&a;
ps:指针常量必须在声明的同时对其初始化,不允许先声明一个指针常量随后再对其赋值,这和声明一般的常量是一样的。
其实常量指针,指针常量,也是从右边往左边读。
数组名类似是指针常量,但是不是指针常量。
int a[4];
在sizeof(a);
和 &a
,都不是指针常量的结果。结果分别是 16
, 和a的地址而不是指向a的指针的地址
。