• 指针、常量和类型别名


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

  • 相关阅读:
    Python创建空DataFrame及添加行数据
    Python读取Excel文件
    Python拆分DataFrame
    Python中识别DataFrame中的nan
    Python线性回归算法【解析解,sklearn机器学习库】
    Python鸢尾花分类实现
    Python机器学习入门
    Python使用map,reduce高阶函数模拟实现Spark的reduceByKey算子功能
    Python参数传递(传值&传引用)
    Python迭代器
  • 原文地址:https://www.cnblogs.com/huiz/p/7019719.html
Copyright © 2020-2023  润新知