指针、常量和类型别名

     今天看了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 pstring cstr = 0;   //这里的const是修饰cstr的类型,而cstr的类型是const pstring,所以理解cstr是指向char常量指针
const pstring* ps;        //这里的const是修饰*ps的类型,但*ps的类型是const pstring,以理解为ps是一个指针,指向char的常量指针
const char* cstr = 0;   //这句的理解在这句话下面黑体部分解释的很清楚了吧,我就不废话了

    总结起来就一句,const修饰定义的变量的类型,*ps本身就是一个指针,再加上const pstring,所以const pstring* ps这句才会是ps是一个指针,它的对象指向char的常量指针。

 

原文链接: https://www.cnblogs.com/huiz/p/7019719.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    指针、常量和类型别名

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/255423

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午8:49
下一篇 2023年2月14日 上午8:50

相关推荐