const修饰符

使用const修饰变量时,该变量的值不可修改,因此需要初始化。

例如 const int s = 0;

此时s为值不可变的变量。

那么基于此,当const修饰指针时的情况有三种:

(1)const int *p;

此时const修饰的是 *p 而非 p,因此,*p的值不可变,而p的值是可变的,所以可不对p进行初始化。

例如,

int s = 0,t = 1;

const int *p;

p = &s;

cout<<*p<<endl;

p = &t;

cout<<*p<<endl;

以上代码输出:

0

1

但此时,无论p指向s或者t,均不能通过 *p 修改p所指向的变量的值,如*p = 2;(这是错误的,因为const修饰了*p,此时*p不可变)

(2)int *const p = &s;

此时*的位置在const的前面,而const直接修饰p,那么p的指向就是固定的,不可变化,因此一定需要初始化。

但此时,仍可通过*p修改p所指向的变量的值。

例如,int s = 0;

int * const p = &s;

cout<<*p<<endl;

*p = 3;

cout<<*p<<endl;

以上代码输出为:

0

3

(3)const int *const p = &s

这种情况下,无论是p还是*p均不可变,因此一定需要初始化。

第三种情况其实是前两种情况的结合体,就不具体分析了。

c++中的const与指针的更多相关文章

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

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

  2. C++中的const和指针组合

    在C++里,const修饰指针有以下三种情况 (1)指针常量:即指向常量的指针 const  int *p或者int const *p const在*前,,可以这样理解它的功能,因为const在*前, ...

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

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

  4. const在指针中的用法

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

  5. C++中的const

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

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

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

  7. C语言中的函数与指针

    1. 为什么需要函数? 函数就是功能的封装. 函数就是为了实现某个功能而编写的一段代码 scanf()    ,  printf() 2.函数优点: 代码更简洁 代码复用 如果业务逻辑变化,只把相应的 ...

  8. 面试集锦-常量,const, const 对指针的影响

    在C语言中不可改变的数据(量)就是常量    在C语言中有三种常量        字面量(直接量),就是直接写出来的,从写法上就可以看出值与类型等,例如:19,123.456等        名字常量 ...

  9. 弄清const与指针、引用之间的关系

    const和 define在常量定义上的差别 在C++中,我们可以使用const 或者 宏define来定义常量.但是C++鼓励使用const定义常量,而不是宏define.原因有很多. 1.defi ...

随机推荐

  1. [Solution] 969. Pancake Sorting

    Difficulty: Medium Problem Given an array A, we can perform a pancake flip: We choose some positive ...

  2. 【mybatis】使用mybatis框架中踩过的坑

    好久没来记录一下自己的学习情况,最近都在学框架,今天来记录一下关于mybatis框架的学习过程中碰过的一些问题: 以下内容可能稍微有点凌乱,因为是把之前遇到过的错误或异常都集中一起了,不过我已经把问题 ...

  3. mysql表理解

    4.1 索引组织表 1.在innodb存储引擎中,每张表都有个主键,如果在创建表时没有显式地定义主键,则innodb存储引擎会按如下方式选择或创建主键: ①:首先判断表中是否有非空的唯一索引,如果有, ...

  4. WPF 初识

    1.WPF 与Winform比较 1.1.WPF所有的操作都不依赖于GDI和GDI+,而是间接依赖于强大的Direct3D,这就意味着通过WPF可以做出以前WinFrom无法想象的视觉效果,包括3D效 ...

  5. 20175126《Java程序设计》第八周学习总结

    # 20175126 2016-2017-2 <Java程序设计>第八周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第十五章,本章 ...

  6. ThreadPoolExecutor源码详解

    ExecutorService使用线程池中可用的线程执行每个提交的任务,这些线程通常都是使用工厂方法配置 线程池解决两种不同的问题:提高处理大量异步任务的性能(通过减少每个线程的唤醒时间) 提供一种管 ...

  7. hdu4622(hash解法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 Now you are back,and have a task to do:Given you ...

  8. 监听端口,获取webService请求报文

    第一步下载我们的wsdl文件到本地 第二步建立一个测试webservice工程,把wsdl放在项目里面 第三步把测试webservice中的wsdlLocation改成localhost.....你的 ...

  9. 10.Redis分布式集群

    10.Redis分布式集群10.1 数据分布10.1.1 数据分布理论10.1.2 Redis数据分区10.1.3 集群功能限制10.2 搭建集群10.2.1 准备节点10.2.2 节点握手10.2. ...

  10. centos vi设置tab为4个空格 和括号自动补全

    1.打开vim配置文件 vi /etc/vimrc 2.设置tab为4个空格, 在文件末尾添加以下内容 if has( "autocmd" ) filetype plugin in ...