zoukankan      html  css  js  c++  java
  • 指针、常量和类型别名

         今天看了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的常量指针。

  • 相关阅读:
    电脑网络连接正常,无法连接浏览器,无法上网
    幂等性
    jvm问题解决
    Mybatis设计模式
    单进程单线程的Redis如何能够高并发
    分布式锁(Zookeeper)
    MyBatis 的 DAO 接口跟 XML 文件里面的 SQL 是如何建立关系的
    ArrayList、LinkedList、Vector、HashSet、Treeset、HashMap、TreeMap的区别和适用场景
    时间函数-线程安全
    socket
  • 原文地址:https://www.cnblogs.com/huiz/p/7019719.html
Copyright © 2011-2022 走看看