C++中的const和指针组合
众所周知,指针是C++中的一个难点,同时也是一个重点内容,如果我们能够用好指针,那无疑对我们进行程序开发有着很大的帮助,但很多人都用不好指针,甚至在一些经典的教材中,对于指针的叙述也有错误。笔者在阅读谭浩强老先生的《C++程序设计》时发现对于 const 和 指针的组合,书中写的有问题,这里给出经过验证(使用vs2015)得到的正确答案。
在C++里,const修饰指针有以下三种情况。
1、指针常量
const int *p或者int const *p,这里 p 是指向常量的指针。
const在*前,,可以这样理解它的功能,因为const在*前,所以p指向的这个int变量对于*p来说是const的,即不能通过*p改变这个变量的值,但是变量本身可以随便改变自己的值。另外也可以改变p的指向。
例:
int x=2;
int y=3;
const int *p=&x;
*p=4; //错误,不能通过*p改变变量的值
x=4; //可以,x不是一个常量,可以改变自己的值
p=&y; //可以,指针p本身不是一个常量,可以改变p的指向。
2、常量指针
int * const p,const在*的后面,也就是说指针p本身是个常量,不能改变p的指向。但是可以通过*p改变所指向变量的值。
例:
int x=2;
int y=3;
int * const p=&x; //注:因为指针p是常量,在声明时就应该初始化。
*p=4; //可以
x=4; //可以,x不是一个常量,可以改变自己的值
p=&y; //错误,指针q本身是一个常量,不能改变它的指向。
3、指向常量的常量指针
这是前两种的结合,功能也是前两者的结合,即不能改变p的指向,也不能通过*p改变所指向的变量的值。
const int * const p或者int const * const p
例:
int x=2;
int y=3;
const int * const p=&x;
*p=4; //不可以,不能通过*p改变所指变量的指。
x=4; //可以,x不是一个常量,可以改变自己的值
p=&y; //错误,指针p本身是一个常量,不能改变它的指向。
总结:从上面可以看出,不论那种情况,变量本身都是可以改变自己的值的,除非变量本身就是声明成常量(const int x=2;)。区别三种情况关键就是看const在类型前还是在指针前,在类型前,不能通过*p改变变量的值,在指针前不能改变指针的指向,且在声明时就要初始化。
作者:耑新新,发布于 博客园
转载请注明出处,欢迎邮件交流:zhuanxinxin@foxmail.com
转载于:https://www.cnblogs.com/Amedeo/p/5746485.html
C++中的const和指针组合相关推荐
- const在指针中的用法
一.指向const对象的指针---对象不能修改 方式1 int value1 = 3; const int *p1 = &value1; *p1 = 5; //错误,不能修改const指向对象 ...
- C++中const与指针
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105113742 C ...
- 【C++】const与指针
目录 一.C与C++中const的区别 二.const与指针的关系 1.const int* (int const*) 2.int* const 3.const int* const 三.常变量与指针 ...
- 文章标题const/ this 指针/析构函数/浅拷贝
类和对象(三) 类和对象.const this 指针 复习 函数重载:命名一样,参数的类型或者个数不同 初始化列表:初始化属性,比函数体内赋值形式效率高 *初始化类列表形式:1.const成员变量2. ...
- c/c++中的const
关于const能否修改 c语言 #include <stdio.h> int main() {const int i = 10;//const int i; //错误,const变量必须在 ...
- C++中的const关键字(zz)
[补充]mutable关键字 有时我们希望类的数据成员即使在const成员函数中,依然是可以修改的,这时就可以把它们声明为mutable来实现.这样的应用,比如记录各种操作的调用次数,这时,即使在co ...
- C++中的const成员函数介绍
List { 02 private: 03 Node * p_head; 04 int length; 05 -- 06 Public: 07 int Get ...
- C语言--const修饰指针解析
这种例子在我们平时编程时可能会很少用,但是在面试时被问的可能性就很大了. 用const修饰指针,常见的情况可以分为四种: 1.const int *p; // p 可变,p 指向的对象不可 ...
- C++中的const成员函数
文章目录 1 C++中的const成员函数 1.1 const成员函数的使用 1.2 同名的const成员函数和非const成员函数构成重载关系 2 mutable关键字 1 C++中的const成员 ...
最新文章
- Scatec Solar拟在乌克兰建设60MW光伏电站
- 3-6-汉诺塔(Hanoi Tower)问题-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版...
- eclipse启动项目
- Notepad++插件Base64编解码
- 基于netty4.x开发时间服务器
- 通过网络连接检测计算机病毒,网络安全习题及答案
- Android 违规使用 Java,谷歌或面临 88 亿美元赔款
- cad2010多个文件并排显示_cad多窗口显示插件(docbar)
- 打工人必备的20款软件,让办公更高效
- java实现供应链_基于jsp的企业物流供应链-JavaEE实现企业物流供应链 - java项目源码...
- FTP上传和下载文件名称中文乱码问题
- MySQL轻快入门2021.3.19(常用函数)
- mysql where[猿教程]
- idea无法识别java文件、Maven下载依赖报错:Cannot resolve...或者Could not find artifact...实测有效
- 记录java.util.Collections.unmodifiableList()使用
- 511遇见易语言基础命令组件和算法
- Word 中的键盘快捷方式
- linux下zip加密压缩和解压
- 阿里云华为云腾讯云被攻击的危害有多大
- 南京大学计算机科学与技术就,南京大学计算机科学与技术怎么样
热门文章
- 电脑脱机状态怎么解除_win7系统如何解除脱机工作 win7系统解除脱机工作步骤【介绍】...
- java归并算法实例_Java编程中实现归并排序算法的实例教程
- oracle同事查两个表,Oracle查询访问同一表的两个以上索引(三)
- android 线程池 阻塞队列,【Android框架进阶〖02〗】ThinkAndroid线程池机制
- 微软纸牌服务器慢,微软为何设计纸牌和扫雷?真是用心良苦
- 安卓android中国象棋chess程序项目源码源代码,C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!,c语言笔记大全...
- 李洪强和你一起学习前端之(9)规避脱标,CSS可见性,滑动门案例
- 三星想抢苹果芯片订单?台积电表示想多了
- SQL Server读懂语句运行的统计信息 SET STATISTICS TIME IO PROFILE ON
- Matlab rand randn randint