C++ primer(第五版) 中的2.5.1的指针、常量和类型变量名的解读

       书本内容

        如果某个类型的别名指代的是复合类型或是常量,那么它用到声明语句里面就会产生意想不到的后果,例如下面的声明语句用到了类型pstring,它实际上是类型char*的别名:

typedef char* pstring;
const pstring cstr = 0;   //cstr是指向char的常量指针
const pstring* ps;        //ps是一个指针,指向char的常量指针。


  上述两条声明语句的基本数据类型都是const pstring,和过去一样,const是对给指定类型修饰,pstring实际上是指向char的指针,因此,const pstring就是指向char的常量指针,而非指向常量字符的指针。

  遇到了一条使用了类型别名的声明语句时,人们往往会错误地尝试将类型别名替换为本来的样子,以理解这条语句的含义:

const char* cstr = 0;    //对const pstring cstr的错误理解


        再次强调一遍:这种理解是错误的。声明语句用到的pstring时,其基本数据类型是指针。可使用char*重写了声明语句后,数据类型变为char, *成为声明的一部分。这样写的结果是,const char成立基本数据类型,前后两种声明截然不同,前者声明了一个指向char的常量指针,改写后的形式声明了一个指向const char的指针。

自己的理解

  说明:书中的常量指针定义是:

const double pi = 3.1415926;
const double * const pip = π // pip是一个指向常量对象的常量指针
//第一个 const 修饰的是 double 第二个const 修饰的是pip 。
//书中的常量指针是指:指向不能改变,值可以改变的(因为书中的是const double,书中的值也不能改变)

        网上说的常量指针与书中定义相反,所以这个是理解这个问题的最难的地方。网上解释的常量指针一般是指针的指向可以修改,但是指针指向的值不可以修改。参考:【C/C++】 常量指针,指针常量、指向常量的常指针详解-CSDN博客

        const pstring cstr = 0;  const 修饰的是一个指向char的指针,而这个指针被const修饰 。也就是说 cstr 是指向char的常量指针,指针指向不能更改,指针的值可以更改。

        const char* cstr = 0; const修饰char 而 *修饰cstr,这样就是cstr是一个指针 ,指向类型是const char。指针指向能更改,指针的值不可以更改(当然你指向更改的,值也会随之变化,值不可更改值得是指针指向的地址对应的值无法发生变化)。

参考:

指针、常量和类型别名_typedef char *pstring-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值