在C++里,const修饰指针有以下三种情况

(1)指针常量:即指向常量的指针

const  int *p或者int const *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改变变量的值,在指针前不能改变指针的指向,且在声明时就要初始化。

C++中的const和指针组合的更多相关文章

  1. c,const和指针组合的几种意义

    const和指针的组合: 注释部分表示非法. ; ; p=&a; //*p = 1 ; ; pp= &a; //*pp = 1; ; //pv=&a; *pv = ; ; // ...

  2. C++中使用const修饰指针

    在本文中呢,主要讲解四个方面,即:常量数据的与否和常量指针的与否中const如何对指针进行修饰: 1.指向非常量数据的常量指针 对于一个指向非常量数据的常量指针,我们应该清楚的知道,在这我们注重的是指 ...

  3. c++中的const与指针

    const修饰符 使用const修饰变量时,该变量的值不可修改,因此需要初始化. 例如 const int s = 0: 此时s为值不可变的变量. 那么基于此,当const修饰指针时的情况有三种: ( ...

  4. 比较常见的const与指针的组合情况

    1.对于普通的const与基本类型组合,都是表示的是这是一个常量, const int a; int const a; 表示的意思是一样的,a是一个常量,不可改变 2.对于const与指针组合在一起, ...

  5. 结合示例说明C++中const和指针结合时怎么理解

    在之前随笔<C++中const使用要点(一)>中简单叙述了const int*.int* const和const int* const的区别,记住三句话就能在实际运用时用对,但是看书时发现 ...

  6. const在指针中的用法

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

  7. Objective-C中的const ,extern,static

    一.const 1>对于const,记住关键的一点,它只是修饰右边的变量. 例如: - (void)viewDidLoad { [super viewDidLoad]; // const两种用法 ...

  8. C++中的const

    一,C++中const的基本知识 1.C++中const的基本概念 1.const是定义常量的关键字,表示只读,不可以修改. 2.const在定义常量的时候必须要初始化,否则报错,因为常量无法修改,只 ...

  9. c++中的引用与指针的区别

    http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...

随机推荐

  1. 将形如:Oct 8, 2016 5:29:44 PM串转换成正常时间在真机上遇到的坑

    将形如:Oct 8, 2016 5:29:44 PM串转换成正常时间在真机上遇到的坑 /** * 根据传入字符串 * * @param str 传入的日期字符串 形如:Oct 8, 2016 5:29 ...

  2. 数据结构 B-树和B+树的应用:数据搜索和数据库索引

    B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不是叶子结点 ...

  3. js兼容性问题总结

    JS中出现的兼容性问题的总结1.关于获取行外样式 currentStyle 和 getComputedStyle 出现的兼容性问题  我们都知道js通过style不可以获取行外样式,当我们需要获取行外 ...

  4. python :模态对话框

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. FunsionCharts图标控件点击

    1.点击执行js 在页面中添加点击chart后需要触发的js事件: <script>        functionmyJS(myVar){          window.alert(m ...

  6. 利用opencv训练样本分类

    参考:http://www.cnblogs.com/easymind223/archive/2012/07/03/2574826.html http://www.tuicool.com/article ...

  7. Asp.Net Core 项目从 1.0.1 升级到 1.1.0 的小补丁

    还有 25 天就要交期末作业了,虽然还有好些功能没完成,但是前端同学还是建议先放到云上跑一跑,于是我轻车熟路的用 VS 2017 搞起了 FTP 发布,然而,发布失败了,错误信息如下: "D ...

  8. R画图中英文字体完美解决方案

    在某些时候,需要在R画图中添加中文,但是默认情况下,R对中文的支持不好. 当用R画PDF图,并且图中有中文的时候,安装并加载如下包library(showtext)然后:showtext.auto(e ...

  9. mysql安装和mysql图形界面安装以及文本文件导入mysql

    本人大一大二一直使用windows系统,被微软爸爸给惯坏了,一看到cmd命令行就吓尿.现在用ubuntu,每一个操作都是语句,也是得到锻炼(个jb). ubuntu安装mysql和python代码 s ...

  10. win7的HOST文件夹具体位置

    win7的HOST文件位置为C:\WINDOWS\system32\drivers\etc\文件夹下,快捷查看方法如下: 1.按win+r,输入C:\WINDOWS\system32\drivers\ ...