常量指针和指针常量

因为可以写成很多种方式,很容易记错,这里提供一种高效的方法。


从右边往左边读,遇到变量名(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的指针的地址


参考:
csdn来源
知乎来源
知乎来源

你可能感兴趣的:(常量指针和指针常量)