一、符号常量的声明

    常量声明的语句的形式:  const +  数据类型说明符 + 常量名 =  常量值

                    数据类型说明符  + const + 常量名 =  常量值         

            注意:   符号常量在声明时一定要赋初值,且在程序中不能改变其值。           

                   const float PI = 3.14159;                   //下面则是错误的声明                   const float PI;                    PI = 3.14159;

二、const* 和 *const 的区分

    目前了解的形式

    例如: const int *p (int const *p)

        int *const p

        const int* const p

    1.const int *p (int const *p) 的意义

       二者表达的意思一致,即 *p  是个 const ,不能通过 *p 修改 p 的指向,所以也可以叫它为只读型指针

由于是将指向的数据视为常量,定义的时候可以不用初始化

 .   int a = ;     
    const int* p;     
    p = &a;     
    *p = 2; //错误,不能通过*p 修改值   
   .   int a = ;      
       const int* p = &a;      
       a = ;      
       cout<< *p << endl; //此时p指向的值可以改变,打印出来为 1   
  .   int a= ,b = ;      
     const int* p = &a;      
      cout<< *p << endl; //*p 值为 0      
      p = &b;      
     cout << *p << endl; //*p 值为 1

  2. int* const p 的意义

      该定义将 p  视为一个const常量,所以定义时就要初始化,且p 指向的位置不能改变,所以也可以叫它指针常量

.  int a = ,b =;
int* const p = &a;
p = &b; //错误,p 的指向已不能改变 . int a = , b = ;
int* const p = &a;
*p = b;
cout << *p << endl; //*p 为 1 . int a = , b = ;
int*const p = &a;
a = b;
cout << *p << endl; //*p 为 1

(const int* p 与 int* const p 与 const int* const p 的区别)

  const int* p 表示把 p  指向的变量看成常量

  int* const p 表示把 p 自己定义为常量,所以定义时就要初始化

  const int* const p 表示 p、*p 都是常量,即 p 的指向不能改变,也不能通过 *p 改变 p 指向的值

  有个评论讲的很有意思,share一下:

看"effective c++"第三条讲到: 
只需要判断const是在 * 的左边还是右边即可。
左边则是修饰被指物,即被指物是常量,不可以修改它的值;
右边则是修饰指针,即指针是常量,不可以修改它的指向;
在左右两边,则被指物和指针都是常量,都不可以修改。
int c = ;
int a = ;
int b = ;
//const出现在*左边,则被指物是常量
const int * pi = &a;
*pi = b;//不正确 被指物是常量
pi = &c; //正确
//const 出现在* 右边,则指针是常量
int * const p = &a;
p = &c;//不正确,指针是常量
*p = c;//正确
//const出现在*左右两边,则被指物和指针都是常量
const int * const ptr = &a;
ptr = &c;//不正确,指针是常量
*ptr = c;//不正确,被指物是常量

-------------------------------------------------------------------------

小注意事项 !!!

1.如果有const int a = 0; 那么必须是 const int* 才能指向 a,像 int* p =&a; 是非法的

2.const int a =10;

int* p =&a; // 错误,这是不能取地址的,否则有修改值的能力

===================================================================================================================

以上为现阶段的学习记录,如有错误希望指正 :)

    

C++中的const的简单用法的更多相关文章

  1. java项目中ehcache缓存最简单用法

      java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...

  2. C++中的const关键字的用法

    1.const用于修饰普通变量,表示常量,不建议修改,某种程度上不允许修改(其实也是可以修改的) 指针常量 :指针(指向的变量的值)自身是一个常量,说明不能改变自身的指向  int* const p= ...

  3. AngularJS中$http服务的简单用法

    我们可以使用内置的$http服务直接同外部进行通信.$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象. 1.链式调用 $http服务是只能接受一个参数的函数,这个参数是一个对 ...

  4. es6中let,const区别与其用法

    ECMAScript 是什么? 首先,我们都知道JavaScript由三部分组成:ECMAScript,DOM,BOM: 其中的ECMAScript是Javascript的语法规范. ECMAScri ...

  5. WPF中StringToImage和BoolToImage简单用法

    在WPF的绑定控件操作中,经常会通过bool值或者某些特定的string值做出相应动作.但UI层控件的很多属性对应的都不是Bool值或者对应的只是固定的String值. 这个时候有两方法解决该问题. ...

  6. ES6中Class与export简单用法

    一.Class ES6中的Class用法类似Java的Class用法,但class的本质是js一个function //定义类 class Person { //定义构造方法 constructor( ...

  7. SQL Server中row_number函数的简单用法

    一.SQL Server Row_number函数简介   ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 以下是R ...

  8. sqlplus 中spool命令的简单用法

    spool基本格式: spool 路径+文件名 select col1||','||col2||','||col3||','||col4||'..' from tablename; spool off ...

  9. angularjs中ng-route和ui-router简单用法的代码比较

    1.使用ng-route: app.js中的写法: var app=angular.module('birthdayApp',['ngRoute']); app.config(function($ro ...

随机推荐

  1. Linux/Centos下安装部署phantomjs

    PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...

  2. 【软工实践】Alpha冲刺(1/6)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 了解了反馈机制的实现原理 确定好算法的框架 对接口的规范化进行学习 展示Git ...

  3. gstreamer的gst-inspect 和gst-launch

    用gstreamer架构做对媒体开发时,gst-inspect 和gst-launch是两个非常使用的小工具,前者是用于查询库中已经包含的所有element以及他们的详细信息,后者用于快速构建一条pi ...

  4. R绘制韦恩图 | Venn图

    解决方案有好几种: 网页版,无脑绘图,就是麻烦,没有写代码方便 极简版,gplots::venn 文艺版,venneuler,不好安装rJava,参见Y叔 酷炫版,VennDiagram 特别注意: ...

  5. 数据结构---哈希表的C语言实现(闭散列)

    原文地址:https://blog.csdn.net/weixin_40331034/article/details/79461705 构造一种存储结构,通过某种函数(hashFunc)使元素的存储位 ...

  6. 微信小程序不同机型的兼容布局解决

    因为小程序是以微信为平台运行的,可以同时运行在android与ios的设备上,所以不可避免的会遇到布局适配问题,特别是在iphone5上,因为屏幕尺寸小的缘故,也是适配问题最多的机型,下面就简单介绍几 ...

  7. peomethues 参数设置 监控网站 /usr/local/prometheus-2.13.0.linux-amd64/prometheus --config.file=/usr/local/prometheus-2.13.0.linux-amd64/prometheus.yml --web.listen-address=:9999 --web.enable-lifecycle

    probe_http_status_code{instance="xxxx",job="web_status"} probe_http_status_code{ ...

  8. Gradle: 一个诡异的问题(ERROR: Failed to parse XML AndroidManifest.xml ParseError at [row,col]:[5,5] Message: expected start or end tag)

    今天同事说他下了一个老版本的AS项目死活编不过,我心想不就是一个项目么,编不过要么就是代码有问题,要么就是依赖库不完整这能有什么问题,于是自己在自己电脑试了下,结果自己也中招了: 乍一看这个错误,说是 ...

  9. 获取并打印Spring容器中所有的Bean名称

    思路: 1.实现Spring的ApplicationContextAware接口,重写setApplicationContext方法,将得到的ApplicationContext对象保存到一个静态变量 ...

  10. 阿里重磅开源在线分析诊断工具Arthas(阿尔萨斯)

    github地址: Arthas English version goes here. Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Art ...