常量指针
指针常量
常量指针常量
这三胞胎如何去区分呢?
1.常量指针
形如:
const 类型* 指针=&变量
类型const *指针=&变量
常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。即这是一个常量修饰的指针。常量保护指针指向的变量,即无法通过该指针来改变变量的值,也就意味着可以通过其他途径来修改该变量,但指针的指向是可以改变的。例如给变量赋值,例如重新定义另一个不保护变量的指针来指向该变量,即可通过另一个指针解引用来改变该变量了。
举个栗子,吃了消化一下
//一枝独秀
int num=0,sum=0;
const int* p=#
//*p=5;无法进行解引用赋值修改
num=5;//例如给变量赋值,
p=∑//指针的指向是可以改变的
int* p1=#//例如重新定义另一个不保护变量的指针来指向该变量,即可通过另一个指针解引用来改变该变量了。
*p1=5;
可以简单记为:const离“*”更近,保护的是值。
2.指针常量
形如:
类型 * const 指针 = &变量
类型*const 指针 = &变量
常量是名称,指针是形容词,以常量为中心的一个偏正结构短语。即指针常量的本质是一个常量。即常量保护的是指针的指向,即指针的指向的不可改变的,但指针指向的变量是可以通过指针改变的,变量也可以通过其他途径来修改。
举个相同栗子,吃了消化一下
//梅开二度
int num=0,sum=0;
int*const p=#
*p=5;//可以进行解引用赋值修改
num=5;//例如给变量赋值,
//p=∑指针的指向是可以不改变的
int* p1=#//例如重新定义另一个不保护变量的指针来指向该变量,即可通过另一个指针解引用来改变该变量了。
*p1=5;
可以简单记为:const离“指针”更近,保护的是指针的指向。
3.常量指针常量
形如:
const 类型* const 指针 = &变量
const 类型 *const 指针 = &变量
显而易见,“常量指针常量”是“常量指针”和“指针常量”的复合体,兼具二者的对变量和指针的保护,即变量的值和指针的指向都无法通过指针来修改了。但其他途径依然如上是可以修改的。
再在举个例子,吃下消化一下
//三潭印月
int num=0,sum=0;
const int*const p=#
//*p=5;不可以进行解引用赋值修改
num=5;//例如给变量赋值,
//p=∑指针的指向是不可以改变的
int* p1=#//例如重新定义另一个不保护变量的指针来指向该变量,即可通过另一个指针解引用来改变该变量了。
*p1=5;
可以简单记为:一个const保护“指针”,一个const保护“变量”,就钉死吧。
这时候二级指针横空出世,通过二级指针即可绕过const常量的保护了。正所谓防君子不防小人,这就是“常量”,而二级指针在这就是“小人”。通过对一级指针的操作用来修改指向或是值,即可达到越过const的作用,一如早期的游戏数据修改。