C++中的const的简单用法
一、符号常量的声明
常量声明的语句的形式: 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的简单用法的更多相关文章
- java项目中ehcache缓存最简单用法
java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...
- C++中的const关键字的用法
1.const用于修饰普通变量,表示常量,不建议修改,某种程度上不允许修改(其实也是可以修改的) 指针常量 :指针(指向的变量的值)自身是一个常量,说明不能改变自身的指向 int* const p= ...
- AngularJS中$http服务的简单用法
我们可以使用内置的$http服务直接同外部进行通信.$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象. 1.链式调用 $http服务是只能接受一个参数的函数,这个参数是一个对 ...
- es6中let,const区别与其用法
ECMAScript 是什么? 首先,我们都知道JavaScript由三部分组成:ECMAScript,DOM,BOM: 其中的ECMAScript是Javascript的语法规范. ECMAScri ...
- WPF中StringToImage和BoolToImage简单用法
在WPF的绑定控件操作中,经常会通过bool值或者某些特定的string值做出相应动作.但UI层控件的很多属性对应的都不是Bool值或者对应的只是固定的String值. 这个时候有两方法解决该问题. ...
- ES6中Class与export简单用法
一.Class ES6中的Class用法类似Java的Class用法,但class的本质是js一个function //定义类 class Person { //定义构造方法 constructor( ...
- SQL Server中row_number函数的简单用法
一.SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 以下是R ...
- sqlplus 中spool命令的简单用法
spool基本格式: spool 路径+文件名 select col1||','||col2||','||col3||','||col4||'..' from tablename; spool off ...
- angularjs中ng-route和ui-router简单用法的代码比较
1.使用ng-route: app.js中的写法: var app=angular.module('birthdayApp',['ngRoute']); app.config(function($ro ...
随机推荐
- Linux/Centos下安装部署phantomjs
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...
- 【软工实践】Alpha冲刺(1/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 了解了反馈机制的实现原理 确定好算法的框架 对接口的规范化进行学习 展示Git ...
- gstreamer的gst-inspect 和gst-launch
用gstreamer架构做对媒体开发时,gst-inspect 和gst-launch是两个非常使用的小工具,前者是用于查询库中已经包含的所有element以及他们的详细信息,后者用于快速构建一条pi ...
- R绘制韦恩图 | Venn图
解决方案有好几种: 网页版,无脑绘图,就是麻烦,没有写代码方便 极简版,gplots::venn 文艺版,venneuler,不好安装rJava,参见Y叔 酷炫版,VennDiagram 特别注意: ...
- 数据结构---哈希表的C语言实现(闭散列)
原文地址:https://blog.csdn.net/weixin_40331034/article/details/79461705 构造一种存储结构,通过某种函数(hashFunc)使元素的存储位 ...
- 微信小程序不同机型的兼容布局解决
因为小程序是以微信为平台运行的,可以同时运行在android与ios的设备上,所以不可避免的会遇到布局适配问题,特别是在iphone5上,因为屏幕尺寸小的缘故,也是适配问题最多的机型,下面就简单介绍几 ...
- 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{ ...
- Gradle: 一个诡异的问题(ERROR: Failed to parse XML AndroidManifest.xml ParseError at [row,col]:[5,5] Message: expected start or end tag)
今天同事说他下了一个老版本的AS项目死活编不过,我心想不就是一个项目么,编不过要么就是代码有问题,要么就是依赖库不完整这能有什么问题,于是自己在自己电脑试了下,结果自己也中招了: 乍一看这个错误,说是 ...
- 获取并打印Spring容器中所有的Bean名称
思路: 1.实现Spring的ApplicationContextAware接口,重写setApplicationContext方法,将得到的ApplicationContext对象保存到一个静态变量 ...
- 阿里重磅开源在线分析诊断工具Arthas(阿尔萨斯)
github地址: Arthas English version goes here. Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Art ...

