指向const的指针和const指针的区别
1. 指向常量的指针(指向const的指针)
指向const的指针,不能改变其所指变量(对象)的值,或者说不能通过这个指向const的指针去改变所指的变量(对象)的值
// 指向const的指针,不能通过*cptr修改指向的变量(对象)的值
const double pi = 3.14;
const double *cptr = π
// 错误,不能通过解引用指针来修改所指变量(对象)的值
*cptr = 42
2. 常量指针(const指针)
const指针,在初始化后,不能改变这个const指针中存放的地址,或者说这个const指针在初始化时,指向了一个变量(对象)后,就不能再改变这个const指针的指向了
// const指针
int errNumb = 0;
int newVal = 77;
int *const curErr = &errNumb;
// 错误,不能修改指针的指向
curErr = &newVal;
3. 指向常量的常量指针(指向const变量的const指针)
此标题所指的const变量==常量==常量对象
指向const变量的const指针,不论是其所指的变量(对象)的值还是自身存放的地址都不能改变,或者说不能通过这个指针去改变所指的变量(对象)的值,在指针初始化后也不能改变这个指针的指向
const double pi = 3.14;
const double newVal = 77.88;
const double *const pip = π
// 错误,不能修改指针的指向
pip = &newVal;
// 错误,不能通过解引用指针来修改所指变量(对象)的值
*pip = 7.62;
4. 识别常量指针----不可修改指针的指向
int errNumb = 0;
int newNumb = 7;
int *const curErr = &errNumb;
const double pi = 3.14;
const double pp = 8.88;
// 指向常量的常量指针
const double *const pip = π
// 正确,可修改指向的对象的值
*curErr = 8;
// 错误,不可修改指针的指向,即初始化后不可重新指向一个其他的对象
curErr = &newNumb;
// ----------------------------------------------------------
// 错误,不可修改指向的对象的值
*pip = 7.62;
// 错误,不可修改指针的指向,即初始化后不可指向一个其他的对象
pip = &pp;
上述代码中,从右往左阅读定义:
离curErr最近的符号是const,意味着curErr本身是一个常量对象,再往左读是一个*,意味着curErr此时是一个常量指针
由此可知,pip也是一个常量指针 ,也就是说,只要符合按*const 标识符这样一种顺序组合的指针,就是一个不可修改指针指向的常量指针
5. 识别指向常量的指针----可修改指针的指向
const double pi = 3.14;
const double pp = 7.62;
const double *cptr = π
// 错误,不可修改指向的对象的值
*cptr = 42;
// 正确,可修改指针的指向
cptr = &pp;
上述代码中,从右往左阅读定义:
离cptr最近的符号是*,往左是一个数据类型,此为double,再往左是const,意味着cptr此时是一个指向常量的指针
因为cptr是一个指针,它指向一个常量pi,所以称cptr是一个指向常量的指针
也就是说,只要符合const 数据类型 *标识符这样一种顺序组合的指针,就是一个不可修改指向对象的值的指向常量的指针
值得一提的是,指向常量的指针可以修改其指向
6. 总结
指向常量的指针:不能用于改变所指变量(对象)的值,但能修改指针的指向
常量指针:不能改变指针的指向,即不能改变指针自身存储的地址值
指向常量的常量指针:既不能改变指针所指的变量(对象)的值,也不能改变指针的指向
Tips:
实际上,指针本身是一个常量并不意味着不能通过指针修改其所指对象的值,能否这样做完全依赖于所指对象的类型
如,pip是一个指向常量的常量指针,则不论是pip所指的对象值还是pip自己存储的那个地址都不能改变
相反,curErr指向的是一个一般的非常量整数errNumb,因为errNumb不是一个常量,那么就完全可以用curErr去修改errNumb的值
指向const的指针和const指针的区别的更多相关文章
- 指向const的指针和const指针
1.指向const的指针:const int *p 或 int const *p 解释:p是一个指针,指向const int类型的常量:指针指向的内容为常量,因此不能改变*p的值,但指针p可以改变,指 ...
- const的理解、const指针、指向const的指针
1.const 的理解 const 是C语言的一个关键字,需要注意的是,const 关键字是把变量变为一个只读的变量(也就是不可以作为左值),绝对不是将这个变量变为常量.也就是说经过const 修饰的 ...
- 指针总结指向const的指针、const指针、指向const指针的const指针
指针的一些总结 const与指针 指向const的指针指的是指针指向的数据是常量,不可以被修改,但指针变量本身可以被修改,如const int *p:严格说不能用指针间接修改指向的数据,但该变量可 ...
- 指针与const
指向常量的指针,不能用于改变其所指对象的值. 指针的类型必须与所指对象的类型一致,但是有两个例外,第一种是允许令一个指向常量的指针指向一个非常量对象: double dra1 = 3.14; cons ...
- C++杂谈(一)const限定符与const指针
const限定符 c++有了新的const关键字,用来定义常变量,可以替C语言中的#define.关于const限定符,有以下需要注意: 1.创建后值不再改变 2.作用范围在文件内有效 3.添加ext ...
- C++中的指针与const
刚开始接触C++时,指针和const之间的关系有点混乱,现在总结如下: 一.指向const变量的指针 #include<iostream.h> void main() { const in ...
- C++中const修饰基本数据类型、指针、引用、对象
const修饰基本数据类型 #include <iostream> using namespace std; void main(){ const int a = 1; const cha ...
- C++ Prime:指针和const
与引用一样,也可以令指针指向常量或非常量,类似于常量引用,指向常量的指针不能用于改变其所指对象的值.要想存放常量对象的地址,只能使用指向常量的指针: const double pi = 3.14; / ...
- 指针和const
将指针参数声明为指向常量数据的指针有两条理由: 这样可以避免由于无意间修改数据而导致的编译错误. 使用const使得函数能够处理const和非const实参,否则将只能接收非const数据. ...
- 指针和Const限定符
指针和Const限定符 1.指向const对象的指针 如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针具有const特性. const d ...
随机推荐
- 深入剖析Base64加解密中遇到的坑点
前言 最近开发过程中遇到了关于使用base64加密传输遇到的神奇问题.需求就是用户的id在链接上露出时需要加密处理,于是后端把下发的用户id改成了base64加密处理后下发了,前端只需要把加密后的用户 ...
- Core WebAPI配置Swagger
1.配置Swagger: Swagger是一套接口文档的规范,通过这套规范,你只需要按照它的规范去定义接口以及接口相关的信息.再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接 ...
- 使用nvm管理node.js版本,方便vue2,vue3开发
在Vue项目开发过程中,我们常常会遇到同时维护Vue2和Vue3项目的情况.由于不同版本的Vue对Node.js 版本的要求有所差异,这就使得Node.js 版本管理成为了一个关键问题.NVM(Nod ...
- AI 艺术工具通讯
创刊号 AI 领域的发展速度令人惊叹,回想一年前我们还在为生成正确手指数量的人像而苦苦挣扎的场景,恍如隔世 . 过去两年对开源模型和艺术创作工具而言具有里程碑意义.创意表达的 AI 工具从未像现在这般 ...
- Deepin搭建git仓库服务gogs,debian也可用
我尝试了gitlab.gitblit搭建均失败,deepin版本20.03 1. 步骤 访问gogs官网下载&安装页面 数据库(选择以下一项): MySQL:版本 >= 5.7. Pos ...
- 从零开始!Jupyter Notebook的安装详细教程
本文将引导你完成从零开始安装Jupyter Notebook的过程.Jupyter Notebook是一个开源的Web应用程序,允许用户创建和共享包含实时代码.方程.可视化和叙述文本的文档.它广泛应用 ...
- Linux - 服务器磁盘 Raid & 分区 & 挂载
一.流计算服务器 有一台流处理服务器(系统盘:2*600G.数据盘:6*600G)分区挂载如下: 设备名 分区 大小 挂载点 文件系统类型 磁盘用途 分区类别 /dev/sda /dev/sda1 3 ...
- 晶振测试仪GDS-80系列参数
晶振测试仪GDS-80系列 一.产品简介 晶振测试仪GDS-80系列是高性价比的晶振测试系统,采用网络分析技术,实现智能化测量,符合IEC-444标准.测量频率范围10KHz-200KHz,1MHz- ...
- 22. Generate Parentheses--求n对括号组成可以组成的全部有效括号序列
描述: Given n pairs of parentheses, write a function to generate all combinations of well-formed paren ...
- MySQL 中 DATETIME 和 TIMESTAMP 时间类型的区别及使用场景
MySQL的日期类型简介 在 MySQL 中有两种存储时间的数据类型 DATETIME 和 TIMESTAMP,它们在数据库实际应用中,各有各的优势和劣势. 一. DATETIME 和 TIMESTA ...