【C/C++】 常量指针、指针常量、指向常量的常指针
const修饰指针的三种情况
int main() {int a = 10;int b = 10;//常量指针//const修饰的是int,指针指向可以改,指针指向的值不可以更改const int * p1 = &a; p1 = &b; //正确//*p1 = 100; 报错//指针常量//const修饰的是指针,指针的值,即指向不可以改。但指针指向的值可以更改int * const p2 = &a;//p2 = &b; //错误*p2 = 100; //正确//指向常量的常指针//const既修饰指针又修饰常量const int * const p3 = &a;//p3 = &b; //错误//*p3 = 100; //错误system("pause");return 0;
}
技巧:看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量。
简而言之:
常量指针,const int * p1 = &a; 由于,const 修饰的是 int,不是p1。因此p1的值可以改,即指针变量 p1 的指向可以改,如 p1 = &b;但指针变量p1指向的对象的值却不可以改,即 *p = 100非法。注意,可以直接通过a=100 的方法来修改a的值。
指针常量,int * const p2 = &a; const修饰的是 “p2”–> , p2的值不可以改,即指针变量p2的指向不可以改,p2 = &b非法。但指针变量p2指向的对象的值可以改,即*p2 = 100合法。
指向常量的常指针,const int * const p3 = &a; const右侧紧跟着的是 " int"–> 常量和 “p3”–> 指针,都不可以改。
const int * (常量指针)在结构体中的使用场景
**作用:**用const来防止误操作。
示例:
//学生结构体定义
struct student
{//成员列表string name; //姓名int age; //年龄int score; //分数
};//常量指针,指针指向可以改,指针指向的值不可以更改。
void printStudent(const student *stu) //加const防止函数体中的误操作
{//stu->age = 100; //操作失败,因为加了const修饰cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;}int main() {student s = { "张三",18,100 };printStudent(&s); //实参为结构体变量的地址system("pause");return 0;
}
输出:
姓名:张三 年龄:18 分数:100
在定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,因此称它们是形式参数或虚拟参数,表示它们并不是实际存在的数据,只有在发生函数调用时,函数中的形参才被分配内存单元,以便接受从形参传来的数据。在调用结束和,形参所占的内存单元也被释放。
当我们传一个数据的地址的时候,只要传一个指针,占四个字节就可以了。但是采用值传递的形式,源数据有多大,值传的就有多多,会完全拷贝出一个新的副本。改传指针,可以节省空间。
当主函数调用 printStudent()函数时,进行虚实结合,把变量s1的地址传送给形参stu(它们都是struct student * 型指针变量),因此,*stu和s为同一存储单元。

常量指针,指针指向可以改,指针指向的值不可以更改。
int * const (指针常量)/ 引用的本质
**作用:**引用的本质在c++内部实现是一个指针常量.
示例:
//发现是引用,转换为 int* const ref = &a;
void func(int& ref){//int b=10; //这两行代码非法//int &ref = b; //声明一个引用后,不能再使之作为另一个变量的引用。ref = 100; // ref是引用,转换为*ref = 100
}
int main(){int a = 10;//自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改int& ref = a; ref = 20; //内部发现ref是引用,自动帮我们转换为: *ref = 20;cout << "a:" << a << endl;cout << "ref:" << ref << endl;func(a);cout << "ref:" << ref << endl;return 0;
}
输出:
a:20
ref:20
ref:100
声明一个引用时,必须同时使之初始化,即声明它代表哪一个变量。当引用作为函数形参时不必在声明中初始化,它的初始化是在函数调用时的虚实结合实现的,即作为形参的引用是函数实参的别名。

指针常量的指向(ref的值)不能改,但指针变量的指向变量的值可以改。
const student & stu 对象的常引用
**作用:**常量引用,指针指向可以改,指针指向的值不可以更改。
示例:
//学生结构体定义
struct student
{//成员列表string name; //姓名int age; //年龄int score; //分数
};//常量引用,指针指向(stu的值)可以改,指针指向的值(stu.age)不可以更改。
void printStudent(const student &stu) //这里是引用
{//stu.age = 19; //非法cout << "姓名:" << stu.name << " 年龄:" << stu.age << " 分数:" << stu.score << endl;}int main() {student s = { "张三",18,100 };printStudent(s); //实参为结构体变量system("pause");return 0;
}
输出:
姓名:张三 年龄:18 分数:100
常量引用,指针指向(stu的值)可以改,指针指向的值(stu.age)不可以更改。
参考链接:
【C/C++】 常量指针,指针常量、指向常量的常指针详解
相关文章:
【C/C++】 常量指针、指针常量、指向常量的常指针
const修饰指针的三种情况 int main() {int a 10;int b 10;//常量指针//const修饰的是int,指针指向可以改,指针指向的值不可以更改const int * p1 &a; p1 &b; //正确//*p1 100; 报错//指针常量//const修饰的是指针,指针的值&am…...
容斥原理,多步容斥
容斥意义法 设计状态表示容斥的过程。比较简单的容斥题目一般可以容斥意义。 如果我们要求方案数的话,通常情况下我们的把限制视为两个方面,一方面是总限制,一方面是对于每个物品的限制,这样设集合 S i S_i Si表示满足总限制以及…...
vue(32) : win10创建vue2基础前端框架
vue2element-uiaxios 1.创建vue2项目 开发工具为HBuilderX 3.7.3 1.1.新建项目 1.2.普通项目-vue项目(2.6.10) 等待创建项目 2.安装element-ui组件 2.1右键左下角开始图标 2.2.cd进入项目目录,执行安装element-ui npm i element-ui -S 2.3.main.js引入配置 import {Paginat…...
如何制作一款资源网站app
简介 平时生活学习中我们会经常登录各种网站,比如看电影,看视频学习,找资料等等。有时想找到一个靠谱的网站,花了很长时间也找不到。我自己收集了很多好的网站,主要是找资源的,然后我做了一个导航app软件&…...
解决在Win7下运行一些老游戏花屏或色彩异常问题的方法
有一些喜欢回顾经典老游戏的玩家们,在目前最新的windows7的操作系统下,运行某些游戏会出现花屏,问题的原因是因为win7对这些游戏的DirectDraw不兼容,一种方法是改游戏配置文件,把游戏色彩8bit改成16bit,当然…...
使用vue3+vite+elctron构建小项目介绍Electron进程间通信
进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责,因此 IPC 是执行许多常见任务的唯一方法,例如从 UI 调用原生 API 或从原生菜单触发 Web 内容的更改。 在 …...
家政APP开发服务同城预约维修接单管理系统软件小程序
家政服务小程序是一个基于移动端的家政服务平台,为用户提供方便快捷的家政服务。以下是小程序的主要功能: 1. 家政服务内容展示:商家可以在小程序中展示各种家政服务项目,如清洁、保洁、保姆、月嫂、钟点工等。用户可以浏览服务信…...
NOIP2023模拟8联测29 C. 蛋糕
NOIP2023模拟8联测29 C. 蛋糕 文章目录 NOIP2023模拟8联测29 C. 蛋糕题目大意思路code 题目大意 你现在得到了一个二维蛋糕,它从左到右可以分成 n n n 列,每列高为 a i a_i ai 。对于每一列,又可以从下到上分为 a i a_i ai 块&#x…...
echarts的图表立体感——实现立体柱状图和立体饼图的详细教程
😂博主:小猫娃来啦 😂文章核心:使用echarts实现立体柱状图和立体饼图的详细教程 文章目录 简单介绍立体柱状图和立体饼图环境配置实现立体柱状图实现立体饼图总结 简单介绍立体柱状图和立体饼图 立体柱状图和立体饼图是数据可视化…...
解决VSCode使用SSH远程连接时无法指定用户名的问题
Windows 11自带OpenSSH客户端,和VSCode配合得很好,没有这个问题。 今天要说的是旧版本Windows 7/8/10系统遇到的问题。 PS: Windows 7可以运行的最后版本是VSCode 1.80.2 由于Windows 7/8/10没有自带的OpenSSH客户端,但可以调用MSYS环境下的…...
Vue Camera是什么,如何用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一、Vue Camera是什么? Vue Camera是一个基于Vue.js的相机组件库,…...
ORANGE室内高尔夫—韩国室内模拟高尔夫原装进口真实体验身临其境
ORANGE室内高尔夫—韩国室内模拟高尔夫 真实体验 身临其境 室内高尔夫的产品优势: 1. 实际高尔夫球场的限制:室内高尔夫可以弥补室外高尔夫球场数量有限的问题,使得更多人能够享受高尔夫运动。 2. 天气和季节的限制:室内高尔夫可…...
【观察】从口袋到云端全景式AI创新,联想“全栈智能”再升级
知名科技杂志《连线》创始主编凯文凯利曾预测:“在未来的 100 年里,人工智能将超越任何一种人工力量,将人类引领到一个前所未有的时代。” 确实如此,犹如历史上蒸汽机、电力、计算机和互联网等通用技术一样,近20年来&a…...
linux 实用命令搜集 —— 筑梦之路
1. xargs命令 # 找出 / 目录下以 .conf 结尾的文件,并进行文件分类find / -name *.conf -type f -print | xargs file# 找出文件并打包find / -name *.conf -type f -print | xargs tar cjf test.tar.gz 2. 查找内存使用量较高的进程 ps -aux | sort -rnk 4 | he…...
08-Docker-网络管理
Docker 在网络管理这块提供了多种的网络选择方式,他们分别是桥接网络、主机网络、覆盖网络、MACLAN 网络、无桥接网络、自定义网络。 1-无桥接网络(None Network) 当使用无桥接网络时,容器不会分配 IP 地址,也不会连…...
【VS Code】使用 VS Code 登陆远程服务器上的 Docker 容器
以下命令默认已经构建了一个 Docker Image。 # 在服务器上启动 docker (-p 端口映射,用于后续的 ssh 连接) docker run -itd -v /mnt/mount/:/home -p 8124:22 --name container-name --gpus all image-name# 进入容器中 docker exec -it container-name /bin/bas…...
用Python做数据分析之数据统计
接下来说说数据统计部分,这里主要介绍数据采样,标准差,协方差和相关系数的使用方法。 1、数据采样 Excel 的数据分析功能中提供了数据抽样的功能,如下图所示。Python 通过 sample 函数完成数据采样。 2、数据抽样 Sample 是进行…...
智慧工地建造平台源码、智慧化工地云平台源码
概述:智慧工地管理平台充分运用数字化技术,聚焦施工现场岗位一线,依托物联网、互联网、AI等技术,围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实…...
Spring Cloud Alibaba中Nacos的安装(Windows平台)以及服务的发现
Spring Cloud Alibaba中Nacos的安装(Windows平台)以及服务的发现 下载安装Nacos解压启动验证是否启动搭建一个简单的Spring Cloud Alibaba项目Spring Cloud Alibaba 以及 Nacos的引入如何选择对应的版本 服务的注册Nacos相关组件的说明 下载安装Nacos G…...
QR码应用实战:Spring Boot与ZXing完美结合
🎏:你只管努力,剩下的交给时间 🏠 :小破站 QR码应用实战:Spring Boot与ZXing完美结合 前言第一: 介绍QR码和ZXing第二:springboot整合zxing添加ZXing依赖生成二维码生成条形码 前言 …...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
