const char * 、char const *、 char * const 三者的区别以及const char * const * p的感悟

一、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++面试题

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值