很多人在刚开始学习C++编程的时候,很难搞清楚const与指针相结合的用法。基于此,我想结合《C++程序设计思想与方法》(翁惠玉版)参考资料来谈谈我自己的一点经验。
首先,const限定符是用来定义常量的,如 const int Count=100,这也就表明 Count是一个常量,不可以再进行赋值等操作,类似于Count ++这种操作肯定会报错的。这是最基础的应用,当const与指针相结合使用的时候,情况比较复杂,主要分为以下三种:
【1】指向常量的指针。 具体形式如: const int *p=&x 这个时候我们在int 整型数据前面限定了const, 也就是说:p指针指向的地址里面只能存放常数,而且一旦确定之后就不能再改变。如果此时你进行 “ *p = 200 ” 操作,系统会提示报错:“左值是一个常量”
【2】常指针。具体形式如:int *const p= &x; 这个表面指针p本身就是一个常量,只允许指向x的地址,存放的地址值不允许发生改变。这个时候x的值是可以改变的,但是p指针的指向地址值是永远不能改变的。
【3】指向常量的常指针。具体形式如: const int *const p=&x; 这里面有两个const关键字。都表示是常量的意思。首先第一个常量限定符限制这个x的值必须是一个常整型,第二个常量限定符限制这个指针p必须指向特定的地址。
如果每次都要这样仔细来区分就比较困难,有没有更加简便的技巧呢?当然,对于常量限定符的使用在C++是有规律可循的。 const 这个常量关键字在哪一个语法单位前面,那么该常量限定符就限制了哪一个部分。 如“const int ” const 在int前面,则表明变量值一定是一个常量整型;如 “*const p”表明指针p 一定是一个常量指针,p所指向的地址不能发生改变。
这样我们对于C++中的常量限定符就有了一个更加清晰的认识了。