c++用了那么久,觉得 const 和指针配合到一起的时候就会有点点分不出来。

如下:

const Data* pData;

Data const * pData

Data * const pData

const Data * const pData      

Data const * const pData

  

是不是有点晕?

我其实用得最多的是 const Data* pData, 也理解该语句是定义 pData指向的对象是不允许修改的(不能通过pData指针调用非const方法)。

那么Data * const pData 实际就是指针本身是不可修改的(你不能将该指针赋值成另一个地址)。

实际上只会出现3中情况.

一种修饰语义是将指针所指向的对象修饰为const.

一种修饰予以是将指针本身(值类型)修饰为const, 本质上像你定义一个 const long 一样。

最后一种是对象为const 同时指针也为const.

那么,上面那一串代码都可以对号入座。

简单的办法是:

const 关键字出现在 * 前面, 修饰的是对象

const 关键字出现在 * 后面, 修饰的是指针

好了,再分析之前的例子:

const Data* pData;               //修饰对象

Data const * pData               //修饰对象

Data * const pData               //修饰指针

const Data * const pData              //修饰对象 + 指针

Data const * const pData              //修饰对象 + 指针

所以有那么多种写法,其实就是在*左边和右边的问题。

我们应该始终按自己的风格选择一种固定模式就好。

为什么const 出现在 * 左边是修饰对象而不是修饰指针

而为什么const 出现在 * 右边是修饰指针而不是修饰对象

要理解这个,需要先理解神射手理论

说有一个神射手,随意的在枪靶上,每隔1cm的地方打了一个眼。

这个枪靶上居住着一种二维生物。

经过很多该生物的宇宙年后,该生物中的科学家终于发明了太空飞船,开始探索自己的宇宙。

最后他们总结出他们的宇宙第一定律,就是每隔1cm的地方有个洞。

哈哈, 我忘记我是在哪看到这个段子的了,是3T还是BigBang. 但是我在思考const 为啥放左边表示修饰对象的时候想起这个故事来着。

不要在意这些细节,我真是一个很会自娱自乐的人。

const 和指针的更多相关文章

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

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

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

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

  3. C语言 const与指针

    //const与指针 #include<stdio.h> #include<stdlib.h> void main(){ ; ; const int *p; p = & ...

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

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

  5. const修饰指针

    关于const修饰指针的情况,一般分为如下4种情况: ; const int *a =&b; //情况1 int const *a =&b; //情况2 int* const a =& ...

  6. 指向const的指针和const指针

    1.指向const的指针:const int *p 或 int const *p 解释:p是一个指针,指向const int类型的常量:指针指向的内容为常量,因此不能改变*p的值,但指针p可以改变,指 ...

  7. const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  8. [001]const和指针

    很经典的: const int* p: int* const p: 前者表示指针指向的值是const,指向的值不可变,但是指针本身是可变的:后者表示改指针是const,指针不可变,但是指向的值是可变的 ...

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

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

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

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

随机推荐

  1. TFS2018 获取所有Build变量及变量值

    添加一个Command Line 步骤,Tool设置为 cmd ,并设置参数为 /k set 注意:若在执行时出现如下报错信息,Tool的值改成 cmd.exe --20T02::.0416435Z ...

  2. 使用 Git + Dropbox + SourceTree 做 Source Code Management

    此篇文章主要針對有安裝 XCode 的 Mac 用戶. Git 版本控管工具,作用類似 CVS.Subversion(簡 稱SVN),好處在於 Git 不像 CVS 及 SVN 是屬於集中式的版本控管 ...

  3. 从SOA到BFV【普元的一份广告文章】

    人类对美好生活的追求是一切技术进步的原动力. 简便.快捷.联结……,这些移动互联的价值让它正成为最贴近消费者的力量.人和设备,设备和设备,人和服务,人和企业,企业和企业都发生了连接.诸如微信.携程.大 ...

  4. 重新认识一遍JavaScript

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Vue 开发线路 资料 汇总

    线路 作者推荐学习线路 https://zhuanlan.zhihu.com/p/23134551 他人建议 https://www.cnblogs.com/smartXiang/p/6051086. ...

  6. node 爬虫 --- 批量下载图片

    步骤一:创建项目 npm init 步骤二:安装 request,cheerio,async 三个模块 request 用于请求地址和快速下载图片流. https://github.com/reque ...

  7. 增强版的RecycleViewAdapter,能够直接使用

    在Android的项目中.须要大量的列表组件来显示数据.在之前的项目中一直使用的是ListView 组件,可是在最新的V7包中出现了能后替代ListView的组件RecycleView. 所以在新的项 ...

  8. 关于颜色(color、background)

    CSS3 HSL colors使用参考指南语法:<length> || <percentage> || <percentage>取值:<length> ...

  9. 如何快速上手一款新的嵌入式CPU芯片(记录CC2540开发经历)

    新换了工作,需要熟悉新公司的产品开发项目,更新博客就懈怠了,不过环境的不同,也让我对嵌入式开发有了更深刻的理解.在原公司我主要负责在STM32F207芯片平台上, 利用UCOS+LWIP进行嵌入式服务 ...

  10. angularjs学习之八(angularjs中isolate scope的使用)

    angular js中指令directive有个特别实用的东西,那就是 isolate scope (被隔离的scope) 关于详细他和全局的scope 有什么差别.能够參考以下这篇博文: Angul ...