博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针、常量和类型别名
阅读量:5298 次
发布时间:2019-06-14

本文共 1056 字,大约阅读时间需要 3 分钟。

     今天看了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

你可能感兴趣的文章
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
FUSE-用户空间文件系统
查看>>
 VS2012 C#调用C++ dll
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
bash使用规则
查看>>
AVL数
查看>>
全栈12期的崛起之捡点儿有用的说说
查看>>
属性动画
查看>>
标识符
查看>>
路由跟踪工具0trace
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
boost库使用:vs2013下boost::container::vector编译出错解决
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
快来熟练使用 Mac 编程
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
plsql使用,为什么可以能看见其他用户的表
查看>>