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 ...
随机推荐
- Chrome远程调试之WebSocket
var ws = new WebSocket('ws://localhost:9222/devtools/page/3c5c05fa-80b7-4cfe-8d1d-ebe79a7a5730');ws. ...
- git工作总结
一.简单介绍 简介:Git是一个开源的分布式版本控制系统,可以有效.高速地处理项目版本管理. 发展史:CSV -> SVN -> Git 优点:Git速度快.开源.完全分布式管理系统 相关 ...
- 反编译pyinstaller打包的exe安装包
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译 在这里分享一些技巧和经验给大家.辛苦撰文分享,转载或引用请保留本文作者信息及文章链接. 作者的环境: win ...
- 在java的Map集合中,怎样更改value的值
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/chenyao1994/article/de ...
- Binder 原理剖析***
一. 前言 希望更加深入理解 Binder 实现机制的,可以阅读文末的参考资料以及相关源码. 二. Binder 概述 简单介绍下什么是 Binder.Binder 是一种进程间通信机制,基于开源的 ...
- ubuntu16.04 18.04 Qt5.11安装Gstreamer
最近因为要做跨平台的视频传输,需要用到linux的解码器,真的是搞死我了 大概讲一下我现在的平台是ubuntu16.04 Qt5.11 ,我现在需要在我的程序中使用视频这一块,无奈linux中,Qt支 ...
- idea断点调试学习随笔
1,rerun XXX,这个就是直接重新跑某个程序.2,这个相当于eclipse里面的f8,直接跑完,到下一个断点停下,没有就直接跑完程序.3,停止项目或者程序.要是自己的main呢,点一下就停下了, ...
- 一个完整的类用来读取OpenSSL生成的pem格式的x509证书(C#)
internal static class CcbRsaHelper { private const string Begin = "-----BEGIN "; private c ...
- Hive跨集群迁移
Hive跨集群迁移数据工作是会出现的事情, 其中涉及到数据迁移, metastore迁移, hive版本升级等. 1. 迁移hdfs数据至新集群hadoop distcp -skipcrccheck ...
- Spring mvc4 + ActiveMQ 整合【什么框架与什么框架的整合搜索】
一.配置部分 二.代码部分 三.页面部分 四.Controller控制器 五.效果展示 六.加入监听器 七.最最重要的,别忘了打赏 一.配置部分 ActiveMQ的安装这就不说了,很简单, 这个例子采 ...

