C++ 限定符Const和指针
指向常量的指针
指向常量的指针不能用于其所指对象的值。若想存放常量对象的地址,只能使用指向常量的指针。
const int a = 3; //a是个常量,其值不能改变
int *b = &a; //错误:b是个普通指针
const int *c = &a; //正确
*c = 8; //错误:c不能给a赋值
允许一个指向常量的指针指向一个非常量,但不能通过该指针修改这个非常量的值(但该非常量可以通过其他途径修改)。
int d = 0; //一个整型变量
c = &d; //正确,但不能通过指针c修改d的值
const指针
常量指针必须初始化,而且一旦初始化完成其值(也就是放在指针的那个地址)就不能改变了。把*放在const前说明不变的是指针的值而不是所指的那个值。
int a = 0;
int b = 1;
const int *c = &a;
int *const d = &a;
c = &b; //正确:但不能通过c改变b的值
*d = 5; //正确:可以通过d改变a的值
d = &b; //错误:d是一个常量指针,其本身的值不能改变
顶层const与底层const
基本概念
指针本身是不是常量与指针所指对象是不是常量是两个相互独立的问题。
用名词 顶层 const 表示本身是个常量。
用名词 底层 const 表示所指对象是个常量。
- 一般的,顶层const可以表示任意的对象。底层cosnt则与指针和引用等复合类型的基本类型有关。
- 特殊的,指针可以同时是顶层const和底层const;声明引用的const都是底层cosnt。
int a = 0;
int *const p1 = &i; //顶层const
const int b = 42; //顶层const
const int *p2 = &b; //底层const
拷贝操作
顶层const在进行拷贝操作时不受什么影响
const int a = 0;
int b = a; //正确:二者类型相同且顶层const不受影响
底层const的限制不能忽视!拷入和烤出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换。一般来说非常量能转换成常量,反之则不行。
const int a = 0;
const int *const p = &a; //具有顶层和底层const的指针p,靠右边的是顶层,靠左边的是底层
const int &b = a; //声明引用的const都是底层const
int b = a; //正确:a包含顶层const,无影响 int *p1 = p; //错误:p包含底层const,p1没有
const int *p2 = p; //正确:二者都包含底层const,p的顶层const无影响 int i = 1;
p2 = &i; //正确:int*能转换成const int*
C++ 限定符Const和指针的更多相关文章
- (1)指针、引用、const限定符
自己看书时的一些理解,可能有错误的地方.随着指针的使用增多,会不断修改这篇文章的内容,过去错误的会用划线划去后保留. 1.对引用.指针.常量引用.指向常量的指针.常量指针的理解 //对引用.指针.常量 ...
- const限定符、constexpr和常量表达式------c++ primer
编译器将在编译过程中把用到const变量的地方都替换成对应的值,为了执行这种替换,编译器必须知道变量的初始值.如果程序包含多个文件,则那个用了const对象的文件都必须能访问到它的初始值才行.要做到这 ...
- Chapter03 第二节 const限定符的使用
3.2 const限定符 const的作用:替代#define作为有类型检查的常量来使用.他的值被初始化后就固定了,成为一个只读变量,不能更改.(推荐使用特殊的命名规范来区分常量和非常量). cons ...
- [C/C++]const限定符总结
const限定符 const是一种限定符,被const所限定的变量其值不可以被改变. const的初始化 由于const一旦创建其值就不能够被改变,所以我们必须对其进行初始化 const int a; ...
- C 类型限定符
C 类型限定符 1. Introduction C 语言中的大部分类型都可以用称为限定符(qualifier)的关键字 const. volatile. restrict. _Atomic 加以限定. ...
- C++杂谈(一)const限定符与const指针
const限定符 c++有了新的const关键字,用来定义常变量,可以替C语言中的#define.关于const限定符,有以下需要注意: 1.创建后值不再改变 2.作用范围在文件内有效 3.添加ext ...
- C++ Primer 第二章 引用 指针 const限定符
1.引用: 为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d也就是声明的变量名(声明符就是变量名). PS:1.通过图片中编译所提示的报错信息 ...
- 指针和Const限定符
指针和Const限定符 1.指向const对象的指针 如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针具有const特性. const d ...
- 【C】——指针与const限定符
const限定符和指针结合起来常见的情况有以下几种. const int *a; int const *a; 这两种写法是一样的,a是一个指向const int型的指针,a所指向的内存单元不可改写,所 ...
随机推荐
- OpenCv基础_三
轮廓检测 图像金字塔 上采样,图像变大一倍,矩阵用0填充 img = cv2.imread('1,jpg') cv_show('img',img) up = cv2.pyrUp(img) cv_sho ...
- 串和KMP算法
一.串 串是由零个或多个字符串组成的有限序列 (一).串的定义 定长顺序存储 特点:每个串变量分配一个固定长度的存储区,即定长数组 定义: #define MAXLEN 255 typedef str ...
- Flask 之 宏
宏 对宏(macro)的理解: 把它看作 Jinja2 中的一个函数,它会返回一个模板或者 HTML 字符串 为了避免反复地编写同样的模板代码,出现代码冗余,可以把他们写成函数以进行重用 需要在多处重 ...
- 利用MSSQL getshell
此次复现使用的sql server 2000 和sql server 2008两个环境进行的 是在已知数据库密码的基础上进行的 0x01 MSSQL连接 连接MSSQL 2000 新建连接: 填写目的 ...
- 千兆网数据CRC检验和过滤
项目简述 本次项目在计算机将图像数据信息通过千兆网发送给FPGA后,由于接收到的数据可能混乱和无效,需要对数据CRC校验和无效包过滤. 项目原理及框图 对iddr_ctrl模块的输入数据和使能信号,分 ...
- 一致性检验评价方法kappa
最近在做眼底图像的无监督分类,使用的数据集辣子kaggle的Diabetic Retinopathy,简称DR,中文称糖尿病型眼底疾病. 最后的评估方法是二次加权kappa.以前没接触过,网上也没有具 ...
- 12.9 supper
Super super的注意事项 super可以用来在子类中访问父类的public属性或方法,super只能出现在子类中. super()调用的是父类的默认无参构造,super(参数)可以调用父类的有 ...
- Spring-MVC 里面的ModelAndView
作用: 由于本身http是无状态的并不会保存什么请求信息. 但是目标页面可能又需要一些信息.这时候可以用ModelAndView存放一些业务数据之类等.然后返回给页面 用法: 比较重要的方法: 往对 ...
- 云计算:Ubuntu下Vue+Springboot前后端分离项目部署(多节点)
一.机器准备 首先准备三台机器: 我是一台WINDOWS系统主机,在WINDOWS里的 VMware 中安装两台Ubuntu系统虚拟机 如果你的虚拟机只有 CentOS,可以参考这篇文章:https: ...
- HTTP-完整状态码表
HTTP状态码列表: 状态码 状态码英文名称 中文描述 100 Continue 继续.客户端应继续其请求 101 Switching Protocols 切换协议.服务器根据客户端的请求切换协议.只 ...