原文链接:https://blog.csdn.net/qq_41592486/article/details/125400305
1. 指针常量的本质是一个常量,使用指针来修饰它,那么说明这个常量的值应该是一个指针,其格式应为:int * const p;这个值因为是常量,所以不能被赋值;
2. 常量指针本质是一个指针,使用 常量 修饰它,表示这个指针是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改;
(1)const int *p;
(2)int const *p;
一、常量指针
定义:指向常量的指针。该指针指向一个常量,常量的值不可变,不可以通过该指针修改其值,但是该指针可以指向其他常量。(指针地址可以变,值不能变)
int a = 0,b = 0;
const int *p = &a;
*p = 1; //错误,不可修改常量值
*p = &b; //正确,可以指向另一个常量
二、指针常量
定义:指针本身是常量。该指针只能指向某个常量,不可再指向其他常量。(指针地址不可变,值可变。注:指针常量在定义时要赋初值。)
int a = 0,b = 0;
int* const p = &a;
*p = 1; //正确,可以修改值
*p = &b; //错误,不可改变地址
三、指向常量的指针常量
定义:指向常量的常指针。(指针地址不可变,值不可变)
int a = 0,b = 0;
const int * const p = &a;
*p = 1; //错误,不可以修改值
*p = &b; //错误,不可改变地址
四、区分记忆:
如果关键字 const 出现在 * 号左边,表示被指物是常量,侧重点是常量,值不可变;
如果 * 号在关键字const左边,表示指针自身是常量,侧重点是指针,地址不可变;
如果出现在 * 号两边,表示被指物和指针都是常量,地址和值都不可变。
(简化记忆:const 与 * 号,谁在左边就以谁为侧重点。)
//注意:两种写法的意义相同,都是常量指针。
const int* a;
int const* a;