众所周知,指针是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和指针组合相关推荐

  1. const在指针中的用法

    一.指向const对象的指针---对象不能修改 方式1 int value1 = 3; const int *p1 = &value1; *p1 = 5; //错误,不能修改const指向对象 ...

  2. C++中const与指针

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105113742 C ...

  3. 【C++】const与指针

    目录 一.C与C++中const的区别 二.const与指针的关系 1.const int* (int const*) 2.int* const 3.const int* const 三.常变量与指针 ...

  4. 文章标题const/ this 指针/析构函数/浅拷贝

    类和对象(三) 类和对象.const this 指针 复习 函数重载:命名一样,参数的类型或者个数不同 初始化列表:初始化属性,比函数体内赋值形式效率高 *初始化类列表形式:1.const成员变量2. ...

  5. c/c++中的const

    关于const能否修改 c语言 #include <stdio.h> int main() {const int i = 10;//const int i; //错误,const变量必须在 ...

  6. C++中的const关键字(zz)

    [补充]mutable关键字 有时我们希望类的数据成员即使在const成员函数中,依然是可以修改的,这时就可以把它们声明为mutable来实现.这样的应用,比如记录各种操作的调用次数,这时,即使在co ...

  7. C++中的const成员函数介绍

     List { 02 private: 03      Node * p_head; 04      int length; 05      -- 06 Public: 07      int Get ...

  8. C语言--const修饰指针解析

          这种例子在我们平时编程时可能会很少用,但是在面试时被问的可能性就很大了. 用const修饰指针,常见的情况可以分为四种: 1.const int *p; // p 可变,p 指向的对象不可 ...

  9. C++中的const成员函数

    文章目录 1 C++中的const成员函数 1.1 const成员函数的使用 1.2 同名的const成员函数和非const成员函数构成重载关系 2 mutable关键字 1 C++中的const成员 ...

最新文章

  1. Scatec Solar拟在乌克兰建设60MW光伏电站
  2. 3-6-汉诺塔(Hanoi Tower)问题-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版...
  3. eclipse启动项目
  4. Notepad++插件Base64编解码
  5. 基于netty4.x开发时间服务器
  6. 通过网络连接检测计算机病毒,网络安全习题及答案
  7. Android 违规使用 Java,谷歌或面临 88 亿美元赔款
  8. cad2010多个文件并排显示_cad多窗口显示插件(docbar)
  9. 打工人必备的20款软件,让办公更高效
  10. java实现供应链_基于jsp的企业物流供应链-JavaEE实现企业物流供应链 - java项目源码...
  11. FTP上传和下载文件名称中文乱码问题
  12. MySQL轻快入门2021.3.19(常用函数)
  13. mysql where[猿教程]
  14. idea无法识别java文件、Maven下载依赖报错:Cannot resolve...或者Could not find artifact...实测有效
  15. 记录java.util.Collections.unmodifiableList()使用
  16. 511遇见易语言基础命令组件和算法
  17. Word 中的键盘快捷方式
  18. linux下zip加密压缩和解压
  19. 阿里云华为云腾讯云被攻击的危害有多大
  20. 南京大学计算机科学与技术就,南京大学计算机科学与技术怎么样

热门文章

  1. 电脑脱机状态怎么解除_win7系统如何解除脱机工作 win7系统解除脱机工作步骤【介绍】...
  2. java归并算法实例_Java编程中实现归并排序算法的实例教程
  3. oracle同事查两个表,Oracle查询访问同一表的两个以上索引(三)
  4. android 线程池 阻塞队列,【Android框架进阶〖02〗】ThinkAndroid线程池机制
  5. 微软纸牌服务器慢,微软为何设计纸牌和扫雷?真是用心良苦
  6. 安卓android中国象棋chess程序项目源码源代码,C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!,c语言笔记大全...
  7. 李洪强和你一起学习前端之(9)规避脱标,CSS可见性,滑动门案例
  8. 三星想抢苹果芯片订单?台积电表示想多了
  9. SQL Server读懂语句运行的统计信息 SET STATISTICS TIME IO PROFILE ON
  10. Matlab rand randn randint