const限定符-C语言中指针的“可变与不可变”法则

news2024/11/14 16:42:39

在C语言的王国里,const这个小玩意儿,就像是一个守卫,手里总拿着“不可更改”的标志。
它最常见的工作,就是给变量贴上“别碰我,我是常量”的标签,告诉大家这是一个常量。
但是,这个守卫有时也会到指针面前指手画脚,告诉它们哪些东西能变,哪些东西不能变。
而且这事儿不简单,要是没弄清规则,指针们很可能就会搞错自己的做法。下面,咱们就一起来看看。

1 指针指向常量内容

const int *ptr; 
int const *ptr; 

这两行代码本质上一模一样。
这里的const,说明ptr所指向的内容不可变。就像是给指针ptr戴上了一副“只读眼镜”。这意味着,通过ptr,你只能读取它指向的值,却不能改变它。好比去博物馆里欣赏展品,但不能触碰它们。
所以,如果你的代码里有这样一行,记得,你只能做个安静的观察者。

2 指针指向的地址不变,但内容可变

int * const ptr; 

这里的const,限定指针指向的地址不变,但内容可变。
就像是给指针ptr的脚上装了一个“固定装置”。这意味着,一旦ptr指向了一个地址,它就不能指向另一个地址了。但是,你可以改变那个地址里的内容。
好比你有一个固定的停车位,你可以在车里放任何你想要的东西,但你不能把车停在别的地方。

3 函数中的常量指针参数

bool fun(int* const ptr){
}

在这个函数中,const限定了,不能更改ptr指向的内存区域的值。
就像是给参数ptr的“修改权”上了一把锁。当你把一个指针传递给这个函数时,函数内部不能改变ptr指向的内存区域的值。
好比你把一本书借给朋友,但告诉他只能读,不能在上面做笔记。

记忆小贴士

常量在左,内容不变:如果const在星号*的左边,那么指针指向的内容是不可变的。
常量在右,指针不变:如果const在星号*的右边,那么指针本身是不可变的,但指向的内容可以变。

记住和理解这些规则,你就可以在C语言的指针游戏中,又提升一个段位了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

T265相机双目鱼眼+imu联合标定(全记录)

最近工作用到t265,记录一遍标定过程 1.安装驱动 首先安装realsense驱动,因为笔者之前使用过d435i,装的librealsense版本为2.55.1,直接使用t265会出现找不到设备的问题,经查阅发现是因为realsense在2.53.1后就不再支持…

python数据分析|二 IPython和JupyterNotebooks

一 python 解释器 Python解释器同一时间只能运行一个程序的一条语句。 如何适用: win r cmd 要退出Python解释器返回终端,可以输入 exit() 或 Ctrl-D。 假设创建了一个 hello_world.py 文件,它的内容是: 可以用下面的命令运…

集群聊天服务器(2)Json介绍

目录 Json序列化Json反序列化 大家之间交流用json,想要发送数据,就把数据序列化成json,想要接收数据,就反序列化成自己程序的语言。 Json序列化 可以直接赋值一个容器对象 js[‘xx’]vec; #include "json.hpp" using jsonnlohman…

ES信息防泄漏:策略与实践

Elasticsearch(简称ES)作为一个开源的搜索和分析引擎,在实时搜索和分析大量数据方面发挥着重要作用。然而,随着数据的增长,ES的信息安全和隐私保护成为了关键问题。信息防泄漏对于ES来说至关重要,它不仅关乎数据的完整性&#xff…

NVR批量管理软件/平台EasyNVR多个NVR同时管理使用时需要开放的端口

随着科技的飞速发展,视频监控技术已广泛应用于各行各业,成为维护安全、提升效率的重要工具。为了更有效地管理和利用这些宝贵的视频资源,视频联网与整合技术应运而生,旨在打破地域与设备限制,实现视频资源的实时共享与…

设计模式(四)装饰器模式与命令模式

一、装饰器模式 1、意图 动态增加功能,相比于继承更加灵活 2、类图 Component(VisualComponent):定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent(TextView):定义一个对象,可以给这个对象添加一…

PL/SQL执行.sql文件

1.编写.sql文件,创建update.sql文件,文件如下: set feedback offset define off--更新表中所有人的年龄update a set age18;prompt Done. 2.打开plsql选择命令窗口,即选择File->New->Command Window; 打开后的…

改扩配系列:浪潮英政服务器CS5280H2、IR5280H2——板载前置3.5寸*12口背板

机器配置情况 机器是云产品原厂配置的超融合一体机3.5*12背板出厂接法,前置是硬盘背板作为超融合数据盘是直通的,使用板载接口没有过raid卡。 主板上的接口既是pcie转接卡的接口,又是sata控制器的接口,如果是nvme_ssd我能理解&am…

【3D Slicer】的小白入门使用指南四

开源解剖影像浏览工具Open Anatomy Browser使用及介绍 和3D slicer米有太大关系,该工具是网页版影像数据的浏览工具(可以简单理解为网页版的3D slicer) 介绍 ● 开放解剖(OA)浏览器是由神经影像分析中心开发的,基于网络浏览器技术构建的图谱查看器。 ● OA浏览器将解剖模…

基于正则化算法的SAR图像去噪matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1SAR 图像噪声模型 4.2 正则化算法基本原理 5.完整工程文件 1.课题概述 基于正则化算法的SAR图像去噪matlab仿真,仿真输出SAR图像去噪结果,正则化参数收敛曲线,同时…

【2024软考架构案例题】你知道 Es 的几种分词器吗?Standard、Simple、WhiteSpace、Keyword 四种分词器你知道吗?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

qt QUndoCommand 与 QUndoStack详解

1、概述 QUndoCommand 和 QUndoStack 是 Qt 框架中用于实现撤销/重做(undo/redo)功能的两个核心类。QUndoCommand 是表示单个可撤销操作的基类,而 QUndoStack 则负责管理这些命令的堆栈,提供撤销和重做操作的接口。 QUndoCommand…

数据分析:16s差异分析DESeq2 | Corncob | MaAsLin2 | ALDEx2

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍DESeq2原理计算步骤结果Corncob原理计算步骤结果MaAsLin2原理计算步骤结果ALDEx2原理计算步骤结果加载R包数据链接数据预处理微生物数据样本信息提取物种名称过滤零值保留结果读取…

【模块化大作战】Webpack如何搞定CommonJS与ES6混战(3)

在前端开发中,模块化是一个重要的概念,不同的模块化标准有不同的特点和适用场景。webpack 同时支持 CommonJS 和 ES6 Module,因此需要理解它们在互操作时 webpack 是如何处理的。 同模块化标准 如果导出和导入使用的是同一种模块化标准&…

python入门3

IDE的概念 IDE(Integrated Development Environment)又被称为集成开发环境。说白了,就是有一款图形化界面的软件,它集成了编辑代码,编译代码,分析代码,执行代码以及调试代码等功能。在我们Python开发中,最常…

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看 2024年 5月20日-6月4日:攻克2D物理引擎。 2024年 6月4日-6月13日:攻克《3D数学基础》。 2024年 6月13日-6月20日:攻克《3D…

机器情绪及抑郁症算法

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月12日17点02分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17230869054974 计算机来理解你的情绪&a…

建设展示型网站企业渠道用户递达

展示型网站的主要作用便是作为企业线上门户平台、信息承载形式、拓客咨询窗口、服务/产品宣传订购、其它内容/个人形式呈现等,网站发展多年,现在依然是企业线上发展的主要工具之一且有建设的必要性。 谈及整体价格,自制、定制开发、SAAS系统…

【Jenkins实战】Windows安装服务启动失败

写此篇短文,望告诫后人。 如果你之前装过Jenkins,出于换域账号/本地帐号的原因想重新安装,你大概率会遇上一次Jenkins服务启动失败提示: Jenkins failed to start - Verify that you have sufficient privileges to start system…

vue自定义计算器组件

自定义组件实现以下简单的计算器功能&#xff1a; 创建计算器组件文件calculator.vue&#xff0c;代码如下&#xff1a; <template><div class"calculator"><!-- 当前运算过程显示区域 --><div class"expression">{{ currentExpr…