一、const char * 、char const *、 char * const 三者的区别:
(1)const char* 和 char const * 等价,都是常量指针,也就是不可通过指针改变所指对象的值,但是对象可以不是常量,也就是说对象本身可以改变自身的值。
例1://不可通过指针改变所指对象的值
char a[2] = { 'a', 'b'};
const char *p1 = a; //①
char const *p2 = a; //②
(*p1)++; //错
(*p2)++; //错
a[0] = 'c'; //对
//其中①②等价
(2)char * const:代表指针常量,即指针不可改变所指对象,但是对象的值可以通过指针改变。
(3)总结:
①const *p:const 在 * 左边时, const 修饰了 *p ,*p是指针所指对象的值,综合下来就是指针不可改变所指对象的值,不可如(*p)++。
②* const p:const 在 * 右边时, const 修饰了 p,p是指针,综合下来就是指针所指对象不可变,不可如*p++。
注:(*p++) == *(p++)
例2://*p++和(*p)++两者区别
char a[2] = {'a', 'b'};
char *p;
p=&a[0];
*p++; //此时 p 指向 a[1]
(*p)++; //若无视上一条语句 *p++; 产生的影响,此时 p 指向 a[0] , a[0] 的值为 'a'+1
二、const char * const * p
(1)为了方便区分两个const,下面我进行颜色的标记
例3:const char * const * p //题目练习
根据上面的总结(3)可以得知,const 修饰了 **p,const修饰了*p,也就是不能如(**p)++,(*p)++。但是可以p++,*p++,**p++。
一有感于博客https://blog.csdn.net/qq_40244176/article/details/80765975
二有感于牛客网关于 const char * const * p 的C++面试题