如何区分“指向const对象的指针”和“const指针”?
const是C++中引入的一个新的关键字,它为C++编程带来了很大的方便。指向const对象的指针和const指针是两个名字很接近的概念,对于初学者来说非常容易搞混,这里对它们进行区分。
- 指向const对象的指针
可以这样理解指向const对象的指针:
指向const对象的指针就是一个指针,不能通过它来修改它所指向的对象的值
· 声明方法:const int *p;
const对象在初始化后是不允许对其值进行修改的,因此,我们不能用一个普通指针指向一个const对象,即下面的赋值会引起编译错误:
const int i = 1;
int *p = &i;
否则的话,我们就可以利用普通指针来修改一个const对象的值,那么const也就毫无意义了。
正确的方法是利用一个指向const对象的指针来获取const对象的地址:
const int i = 1;
const int *p = &i;
这样,利用指向const对象的指针也是不能修改它所指向的const对象的值的。
需要注意的两点:
- 指向const对象的指针本身不是const类型(这也是它与const指针的主要不同点),所以它可以指向另一个const对象
- 指向const对象的指针可以被赋予一个非const对象的地址,但是此时试图通过此指针来修改对象的值的操作是非法的
2. const指针
可以这样理解const指针:
const指针就是一个指针,它本身就是const类型,所以将它初始化后不能再改变它的指向,即不能让它指向一个新的对象
- 声明方法:
int *const p; //指向非const对象的const指针
const int *constp; //指向const对象的const指针
由以上声明方法可以看出,const指针可以指向const对象和非const对象,但是两者的声明方法是不同的。
使用const指针不可以修改其地址值,但是const指针指向非const对象,就可以利用它修改它所指向的对象的值。
总结:
- 初学者之所以会混淆两者的根本原因是他们头脑中的一些隐式假定在作怪,也就是说想当然地给要分析的对象强加上一些它们原本并不存在的属性,这是很多人在处理问题时很容易犯的一个通病。只要语法规则没有明确说明是非法的,我们就可以拿来用,而没有必要人为地加上种种限制。其实要弄清两者的区别,只要明确两点就够了:
- 指针本身是const型还是非const型
- 指针所指向的对象是const型还是非const型
const型变量的值在初始化后是不允许改变的(这是根本),那么const指针其指向是不能变的, const对象其值是不能变的,一切都清楚了
2. 要弄清楚上面的两个问题,有一个很简单的办法:
如果指针名前紧邻的关键字为const,那么它就是一个const指针;如果声明指针所指向的对象类型前有const关键字,那么它就是一个指向cosnt对象的指针。
应用上面的判断方法,const int *const p; 就表示指向const对象int的const指针。
如何区分“指向const对象的指针”和“const指针”?相关推荐
- const对象不能调用非const成员函数
在C++中,可以用const来定义一个const对象,但const对象不可以调用类中的非const成员函数 原因 引发原因:: 由调用成员函数时隐式传入的当前对象的this指针引起. 非const成员 ...
- const指针和指向const对象的指针
1.指向const对象的指针 C++强制要求指向const对象的指针也必须具有const特性. const double *ptr; 限定了ptr指针指向double类型const对象的, 即cons ...
- const指针与指向const对象的指针
一. 指向const对象的指针: 定义形式:const double *cptr; const限定了指针指向的对象类型,指针本身不是const类型 特征: 1.不能通过指针改变const对象的值,但是 ...
- 父类指针指向子类对象的问题、父类对象和子类对象之间的问题
一.父类指针指向子类对象 先上代码: class Base {public:void base_fun1() {}virtual void base_fun2() {cout << &qu ...
- C++知识点11——this指针,const成员函数,访问权限控制
1.this指针 每个类都有this指针,this指针指向this指针指向的是类的对象本身 class A { public:A() {}~A() {}void func() {cout<< ...
- 指针和Const限定符
指针和Const限定符 1.指向const对象的指针 如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针具有const特性. const d ...
- 指针和const限定
[1]指向const对象的const指针 可以定义指向const对象的const指针,形式为: const 指向类型 * const 指针变量名: 例如 con ...
- C和指针之const、#define、volatile
1.const 定义const 只读变量,具有不可变形 const int a = 100; 编译器通常不为普通Const只读变量分配存储空间, 而是将它们保存在符号表中, 这使得它成为一个编 ...
- Java中的对象类型像引用还是指针,谁是谁非?
Java中的对象类型像引用还是指针,谁是谁非? 作者:海枫 地址:http://blog.csdn.net/linyt 作为一名程序员,我们应该对新知识和新技术刨根问底,而不应泛泛而谈.我未曾接触到J ...
最新文章
- 做产品16年总结9条心得
- FZU - 2218 Simple String Problem(状压dp)
- 韵乐x5效果器ktv最佳参数_家庭ktv(卡拉ok)家庭影院ktv选购推荐攻略
- java 字符串编码
- ES5实现ES6的一些方法-call,bind,is,promise
- cedit多行文本设置透明背景会重叠_python:电商用户评价文本分析(wordcloud+jieba)...
- 诺基亚5800软件测试初学者,诺基亚5800刷机【教程详解】
- MATLAB R2013 a版及序列号
- 你见过最垃圾的代码长什么样?19 种垃圾代码片段!
- html怎么加圆圈,圆圈1怎么打 word怎么打一个圈里面加数字1
- axios封装简单有效
- 解决手机WiFi(电脑热点)一直正在获取IP地址或无法访问互联网【与网上其他方法不同】
- java 内存模型JMM解析
- 【Python二级等考大题】星座三问
- uni-app使用iconfont
- 计算机科学与技术的班徽设计,地球科学与技术学院 2017级班级班徽创意设计大赛获奖公示...
- 23hh小说网——爬虫python
- linux中ERR_PTR、PTR_ERR、IS_ERR和IS_ERR_OR_NULL
- PHP中的addslashes双胞胎兄弟函数
- 33页政务大数据平台-数据智能治理子平台建设方案
热门文章
- 如何用Python制作一个简单的二维码生成器
- view路由传参方法
- hihocoder 1041
- Mac 硬件驱动(.kext)安装方法
- MHA与PXC的区别
- php fpm iamp,基于IAMP的WEB安全模型
- 地理坐标(经纬度)转换成投影坐标(XY坐标)
- 搭建私有云盘ownCloud
- 搭建私有云:owncloud(用Docker构建owncloud私有云盘)
- 3GPP TS 23501-g51 中英文对照 | 4.2.10 Architecture Reference Model for ATSSS Support