const是constant的缩写,本意是“不变的、不易改变的”,它属于c、c++、Java等高级语言中的关键字,通常用来修饰变量对象、函数参数、c或c++指针对象使用。

const在实际编程中起着至关重要的作用,本文主要讲解它在编程中的不同含义。

章节预览:

1. 变量修饰
2. 指针修饰

章节内容:

1. 变量修饰

【例1】 int const a;

示例代码

int const a = 5;
          int b = a; //正确
          b = 6; //正确
          a = 6; //错误
          const int *p = &a; //正确
          *p = 6; //错误
          p = 0; //正确

示例分析

  • 定义一个int类型常量a,a的值为5;
  • 定义一个int类型b,b初始化赋值为a;
  • b赋值为6;
  • a赋值出错,a的值不允许修改;
  • 定义一个int类型常量指针p,并指向常量a的地址;
  • p指向的内存赋值出错,a的值不允许修改;
  • p地址赋空地址,a的地址不变。

示例概况

  • 定义(类型 + const + 对象)形式,必须初始化赋值;
  • 对象在生命周期内不允许赋值,即对象值不允许修改;

示例相似情况

  • (int const a)、(const int a)都属于常量对象,所表达的含义相同。

2. 指针修饰

【例2】 const int *p;

示例代码

const int *p;
          int a = 5, b = 6;
          p = &a; //正确
          *p = 6; //错误
          p = &b; //正确
          *p = 7; //错误

示例分析

  • 定义一个常量int类型指针p;
  • 定义一个int类型a,初始化赋值为5;
  • 定义一个int类型b,初始化赋值为6;
  • p地址赋变量a的地址;
  • p指向的内存赋值出错,a的值不允许修改;
  • p地址赋变量b的地址;
  • p指向的内存赋值出错,b的值不允许修改;

示例概况

  • 定义(const + 类型 + *(*在定义处表示指针声明,*的数量表示指针的维数) + 对象)形式,允许不进行初始化赋值;
  • 指针对象在生命周期内允许赋地址,即对象地址允许修改;
  • 指针对象在生命周期内不允许赋值,即对象值不允许修改;

示例相似情况

  • (const int *p)、(int const *p) 、(const int const *p)都属于常量指针,所表达的含义相同。

【例3】 int * const p;

示例代码

int a = 5, b = 6;
          int * const p = &a;
          *p = 6; //正确
          p = &b; //错误

示例分析

  • 定义一个int类型a,初始化赋值为5;
  • 定义一个int类型b,初始化赋值为6;
  • 定义一个int类型指针常量p,并指向变量a的地址;
  • p指向的内存赋值为6,即a的值为6;
  • p地址赋变量b的地址出错,p的地址不允许修改;

示例概况

  • 定义(类型 + * + const + 对象)形式,必须初始化赋值;
  • 指针对象在生命周期内允许赋值,即对象值允许修改;
  • 指针对象在生命周期内不允许赋地址,即对象地址不允许修改;

示例相似情况

  • (int * const p)属于指针常量,只有这一种定义形式。

【例4】 const int * const p;

示例代码

int a = 5, b = 6;
          const int * const p = &a;
          *p = 6; //错误
          p = &b; //错误

示例分析

  • 定义一个int类型a,初始化赋值为5;
  • 定义一个int类型b,初始化赋值为6;
  • 定义一个常量int类型指针常量p,并指向变量a的地址;
  • p指向的内存赋值出错,a的值不允许修改;
  • p地址赋变量b的地址出错,p的地址不允许修改;

示例概况

  • 定义(const + 类型 + * + const + 对象)形式,必须初始化赋值;
  • 指针对象在生命周期内不允许赋值,即对象值不允许修改;
  • 指针对象在生命周期内不允许赋地址,即对象地址不允许修改;

示例相似情况

  • (const int * const p)、(int const * const p)、(const int const * const p) 都属于常量指针常量,所表达的含义相同。

本节概况

  • 指针常量:指针地址不允许修改,但指针指向的内存值允许修改;
  • 常量指针:指针地址允许修改,但指针指向的内存值不允许修改;
  • 常量指针常量:指针地址和指针指向的内存值都不允许修改。

高级语言中的关键字:const用法分析相关推荐

  1. escape mysql_MySQL中ESCAPE关键字的用法详解

    MySQL转义 转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义. MySQL中,转义字符以"" ...

  2. python中的range_python中range()与xrange()用法分析

    本文实例讲述了python中range()与xrange()用法.分享给大家供大家参考,具体如下: 据说range比xrange开销要大,原因是range会直接生成一个list对象,而xrange每次 ...

  3. C#.NET验证码智能识别学习笔记---02-C#.Net中Using关键字的用法

    C#.NET验证码智能识别学习笔记---02-C#.Net中Using关键字的用法 技术qq交流群:JavaDream:251572072  教程下载,在线交流:it.yunsit.cn ------ ...

  4. MySQL中ESCAPE关键字的用法详解

    MySQL中ESCAPE关键字的用法详解 MySQL中ESCAPE关键字的用法详解 1. mysql转义概述 2. escape验证 MySQL中ESCAPE关键字的用法详解 1. mysql转义概述 ...

  5. Delph7中TcpClient和TcpServer用法分析

    Delph7中TcpClient和TcpServer用法分析 http://blog.csdn.net/quicmous/article/details/4263115 最近使用了Delphi7提供的 ...

  6. mysql escape关键字_MySQL中ESCAPE关键字的用法详解

    MySQL转义 转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义. MySQL中,转义字符以"\" ...

  7. java编程里的values怎么使用,详解Java编程中super关键字的用法

    这篇文章主要介绍了Java编程中this与super关键字的用法,包括从内存结构方面分析super的作用域,需要的朋友可以参考下 通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程 ...

  8. C++中virtual关键字的用法

    关于virtual关键字的用法总结如下,有错误或者总结不到位的情况请能帮本人指出,非常感谢! Virtual是C++ OO机制中很重要的一个关键字.只要是学过C++的人都知道在类Base中加了Virt ...

  9. android include 控件详解,Android开发中include控件用法分析

    本文实例讲述了Android开发中include控件用法.分享给大家供大家参考,具体如下: 我们知道,基于Android系统的应用程序的开发,界面设计是非常重要的,它关系着用户体验的好坏.一个好的界面 ...

最新文章

  1. java在线编程题_阿里笔试题(2017在线编程题)-- 数串分组 --Java实现
  2. avrorecord.java,失败,但发生异常java.io.IOException:org.apache.avro.AvroTypeException:发现的很长,期望在配置单元中实现联合...
  3. python简单代码 春节集五福-集五福活动又来了,不过这个价值几十亿的大项目也别错过...
  4. NUMBER_GET_NEXT 获取编号年度问题
  5. csdn开发者报告中学习到的新知识
  6. 02 - Unit06:弹出对话框
  7. java中组合_java中组合模式详解和使用方法
  8. IntentService解析
  9. Python中的sys模块
  10. mysql接口教程_接口测试教程 - xmysql 介绍
  11. jupyter not a color scheme terminal
  12. 测试工程师的核心竞争力----打卡第九天
  13. C++中的构造函数小结
  14. 用关键字搜索c语言,c语言-以关键字搜索程序
  15. 前端:css中的多列的实现与介绍
  16. Bridging the Gap between Training and Inference for Neural Machine Translation翻译
  17. 怎么调整计算机显示屏,电脑显示器画面怎么调整
  18. cesium 鼠标点击pick与drillPick的区别
  19. libc and libc++
  20. 密码学史观----Cryptography

热门文章

  1. 蚂蚁金服 Service Mesh 落地实践与挑战|成都Service Mesh沙龙预告
  2. 关于H5工程师那些日常必需工具
  3. Java进阶 | 泛型机制与反射原理
  4. 学习ActiveMQ(一):安装与启动
  5. adb-常用命令记录
  6. 没网?没问题。用Air Gap使用Artifactory
  7. redis-cluster集群单机搭建
  8. IOS scrollView 知识点
  9. loadrunner11完整卸载
  10. SQL Server的导出导入方式有