C++问题小结--2.通过几个例子谈谈const与*
2016-04-14 09:51
323 查看
const在C++里能够封锁参数,修饰函数,修饰返回值
首先,清楚一个概念,比如说我们定义了一个char类型的指针
char *p,那么,在这里,p是一个char *类型的指针。p指的是p指针的指向的地址,
*p是这个指针的指向空间的内容(或者说是指针所指向空间的值)。
char *p = &i; //那么这里*p存的是这个i变量的值;
下面让我们从几个例子入手理解const的位置放置的不同引起的含义的不同:
int *p; const int * p; int const * p; //第一二行是等价的 int * const p; const int * const p;
这里有一个简便方法用来区分这几条语句
(1)
const int *p = &a;
表示:p的指向空间的内容(或者说指针所指向空间的值)不能被修改,或者说:这个指针所指向的空间的内容不可通过改变*p的值来改变(个人觉得后者描述更加准确具体一些)(图一)。当然,a的值可以改变,但是a的值改变,却仍然不能改变p所指向的地址(图二)。如图:(
int const *p = &a;与之等价,不在赘述。)
图一:
图二:
p的地址仍然是0018FF44
(要注意的是p的地址实际上是a的地址,这个容易使人啼笑皆非,但是事实如此
但是上面的例子可以修改p的地址
(2)
int * const p = &a;
表示:p指针的地址不能被修改,或者是说指针的指向不能被修改。但是*p却可以被修改,也就是说p所指向的空间的内容可以被修改。
图三为p最初的地址
图三:
图四试图修改p的地址
图四
但是修改*p却是可以的。(如图五)
图五:
(3)
const int * const p;
表示:第一个const表示p所指向的空间的内容不可以通过*p来修改;第二个const表示p的地址,或者是说指针的指向不能被修改。
至此,const容易混淆的地方我们已经解释清楚,总结一下无非就是:
当const在*的左边,则表示指针所指向的空间的内容不能通过改变
*p的值来修改,或者说指针所指向空间的值不能被修改。
当const在*的右边,则表示指针的地址不能被修改,或者说指针的指向不能被修改。
值得注意的是下面这段语句里:a的地址即就是指针p的地址。
int *p; p = &a;
这个主要应用在C++中的this指针这块
如上图,类中所定义的函数貌似只有三个参数,实质上有四个,第四个是什么呢?那就是我们的this指针,这个参数是这样定义的
CGoods *const this,这里就用到了我们今天谈到的const类型的用法,它使得this指针的地址无法改变,达到封锁参数的目的,这样就打消了修改this指针的念头。
相关文章推荐
- C++语言笔记系列之十六——赋值兼容规则&多继承的二义性
- C语言strstr()函数:返回字符串中首次出现子串的地址
- C语言实现单链表,单链表面试题面试
- c语言typedef的用法
- C/C++基础知识01
- 日期类(C++实现)
- C++ 语言实现1加到100(初学者)
- C++走向远洋——35(友元,时间)
- C++消息分发模块框架的的突发奇想,不足之处欢迎指正
- c/c++ 语言 左右移位操作
- c++中vector用法
- c语言中的未定义行为
- C++源码网站
- c++默认类型转化
- C语言常见错误中英文对照表
- C++单向链表之链表的创建
- C++单向链表-查找某个节点
- 多文件组织关于游戏的类
- 多文件组织关于游戏的类
- 多文件组织关于游戏的类