【C语言const关键字】

news2024/11/16 5:42:41

C语言const关键字

  • C语言之const关键字
    • 1、什么是const?
    • 2、const的用法
      • 2.1、const作常量的修饰符例程1
      • 2.2、const修饰函数的参数例程2
    • 3、const与指针变量的搭配
      • 3.1、指针与const的应用例程
      • 3.2、指针与const的应用延申二级指针
    • 4、结束语

C语言之const关键字

前言:
为了理解const的作用,可以把它比作一个箱子的锁;当我们自己使用箱子的时候,可以正常使用。
当我们不想给别人想使用箱子时,就上一把锁,那么别人就拿不到箱子里的东西,使得东西安全的放在箱子里。

/知识点汇总/

1、什么是const?

概念
const是用来限定一个变量不允许被改变的修饰符
作用
被const关键字所修饰的变量,它的值不能被改变,在整个作用域中都保持固定。
注意
const — 修饰变量,这个变量就被称为常变量,使得变量不能被修改了,但本质上仍然是变量

2、const的用法

主要分为两类
a、const作常量的修饰符
b、const修饰函数的参数

2.1、const作常量的修饰符例程1

修饰格式:
关键字 + 数据类型 + 变量名 + 变量值
如:const int age = 10;
说明:const是用来限定一个变量不允许被改变的修饰符,被const关键字所修饰的变量,也为不能被改变的值。
注意:在创建常量时候必须要设置它的初始值,举个例子:
const dobule PI = 3.14159; //正确的声明方式
const int age; //错误的声明方式

#include <stdio.h>
//const 修饰定义的常变量就不可改变值
int main()
{
	int a = 10;
	printf("a = %d\n",a);
	a = 50;
	printf("a = %d\n", a);
	
	const int b = 10;//b 就是被const修饰的常变量
	//表达式必须是可修改的左值
	//但本质上b还是一个变量,只是相当于加了限制条件/属性
	//const int 在C++里等价于常量
	printf("b = %d\n", b);
	b = 100;//报错,因为被const修饰的变量就不可改变了,故b = 10
	printf("b = %d\n", b);
	return 0;
}

如图所示
在这里插入图片描述

2.2、const修饰函数的参数例程2

回顾上一篇介绍assert关键字中的例程
说明;
const 修饰函数传参的参数时,使得避免参数的返回值错误,使得代码更加的优化完善,减少Bug的出现。

#include <stdio.h>
#include <assert.h>
#include <string.h>

//size_t --- unsigned int
size_t My_strlen(const char* str)//参数传数组首地址
{
	assert(str != NULL);//断言,判断是否传的空地址,及时报错纠正
	int count = 0;//计数
	//是假就不执行while循环
	//是真则执行,函数体
	//不断判断后加加(后置++,先用后加),数组元素是否为字符串结束标志位'\0'
	while (*str != '\0')
	{
		str++;
		count++;
	}
	return count;
}
int main()
{
	char arr[] = "hello bit!!!";
	int len = My_strlen(arr);
	printf("%d\n", len);//12
	return 0;
}

3、const与指针变量的搭配

注意
const — 修饰变量,这个变量就被称为常变量,使得变量不能被修改了,但本质上仍然是变量

const 修饰指针变量时

a、const 如果放在解引用操作符✳的左边修饰的是✳p,表示指针指向的内容,使得不能再通过指针改变指针的对象
b、const 如果放在✳的右边修饰的是指针变量p,使得指针变量不能改变了,同理,指针的对象可修改了

注意的是
const 修饰的是指针指向的对象,所以当指向一个新的变量,指针又可正常使用了。
即:指针变量本身是不被const约束的

3.1、指针与const的应用例程

注意:代码为了高亮显示,部分地方已去掉了单行注释符//

#include <stdio.h>
int main()
{
	int a = 10;
	int* pa = &a;
	*pa = 20;
	printf("%d\n",a);

	const int a = 10;
	a = 15;//报错---被const修饰了
	printf("%d\n", a);//10
	int* pa = &a;
	*pa = 20;
	printf("%d\n", a);//20----当通过指针可以改变a,但有违背const语法

	const int a = 10;
	//a = 15;//报错---被const修饰了
	printf("%d\n", a);

	//const 修饰指针变量时
	const int* pa = &a;
	//1.const 如果放在*的左边,修饰的是*p,表示指针指向的内容,使得不能再通过指针改变了
	int* const pa = &a;
	//2.const 如果放在*的右边,修饰的是指针变量p,使得指针变量不能改变了,同理,指针的对象可修改了
	*pa = 20;
	printf("%d\n", a);//报错--- 表达式必须是可修改的左值

	//注意的是const 修饰的是指针指向的对象
	//所以当指向一个新的变量,指针又可正常使用了
	//即指针变量本身是不被const约束的
	
	int n = 15;
	pa = &n;//把新变量地址给pa
	printf("%d\n",n);//15---正常输出
	return 0;
}

如图所示
在这里插入图片描述

3.2、指针与const的应用延申二级指针

二级指针const应用— 与一级指针同理:int const * const * const pa; 不常用就不过多赘述了
三级指针等也同理const的位置约束就不同

4、结束语

相信大家阅读后对const关键字又了新的发现,熟悉后在需要的地方正确的使用,const对程序也会起到关键的作用。提升代码的规范性,变量的功能性等。

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

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

相关文章

iOS iPadOS safari 独立Web应用屏幕旋转的时候 window.innerHeight 数值不对。

iOS iPadOS safari 独立Web应用屏幕旋转的时候 window.innerHeight 数值不对 一、问题描述 我有一个日记应用&#xff0c;是可以作为独立 Web 应用运行的那种&#xff0c;但在旋转屏幕的时候获取到的 window.innerHeight 和 window.innerWidth 就不对了&#xff0c;不是屏幕的…

无法安装此app,因为无法验证其完整性 ,解决方案

最近有很多兄弟萌跟我反应“无法安装此app,因为无法验证其完整性 ”&#xff0c;看来这个问题无法避免了&#xff0c;今天统一回复下&#xff0c;出现提示主要有以下几种可能 1.安装包不完整 首先申请我所有分享的破解软件全部都有自己校验过&#xff0c;一般不会存在问题出非你…

【视频观看记录】Bubbliiiing的Pytorch 搭建自己的Unet语义分割平台(Bubbliiiing 深度学习 教程)

来源 b站 地址 什么是语义分割 语义分割&#xff1a;对图像每个像素点进行分类 常见神经网络处理过程&#xff1a;Encoder提取特征&#xff0c;接着Docoder恢复成原图大小的图片 UNet整体结构 分为三个部分 主干特征提取部分&#xff1a; 卷积和最大池化的堆叠获得五个初…

win10安装pytorch GPU

我记得以前安装过深度学习库GPU版本&#xff0c; 需要安装cuda什么的&#xff0c;翻了下还真写过一篇win10安装tensorflow的文章&#xff0c;但是流程不止不详细&#xff0c;还不清晰。这次就再记录一遍 这次安装的是pytorch&#xff0c;这么多年似乎pytorch要逐渐统一深度学习…

JavaEE语法第二章之多线程(初阶二)

目录 一、线程常用方法 1.1启动一个线程-start() 1.2中断一个线程 1.2.1使用自定义的变量来作为标志位. 1.2.2使用 Thread.interrupted() 或者 Thread.currentThread().isInterrupted() 代替自定义标志位. 1.2.3观察标志位是否清除 1.3等待一个线程-join() 1.4获取当前…

Typora文本的使用

1. 如何创建目录&#xff1f; 输入几个#&#xff0c;再加空格&#xff0c;写入文字回车后就是几级标题&#xff1b; 2. 如何输入代码块&#xff1f; 英文状态下&#xff0c;输入三个反引号&#xff0c;然后回车即可&#xff1b; 3. 如何输入竖线和小圆点&#xff1f; 4. 如何…

SSH远程直连Docker容器

文章目录 1. 下载docker镜像2. 安装ssh服务3. 本地局域网测试4. 安装cpolar5. 配置公网访问地址6. SSH公网远程连接测试7.固定连接公网地址8. SSH固定地址连接测试8. SSH固定地址连接测试 转载自cpolar极点云文章&#xff1a;SSH远程直连Docker容器 在某些特殊需求下,我们想ssh…

使用显式特征的在线交互感知提升网络

目录 1介绍 2相关工作 2.1提升建模 2.2特征交互 3前提 4提出的方法 4.1架构 4.2训练 5试验评估 6结论和未来 英文题目&#xff1a;Explicit Feature Interaction-aware Uplift Network for Online Marketing 翻译&#xff1a;使用显式特征的在线交互感知提升网络 单…

MATLAB 之 Simulink 系统仿真实例和 S 函数的设计与应用

这里写目录标题 一、Simulink 系统仿真实例1. 方法一2. 方法二3. 方法三 二、S 函数的设计与应用1. 用 MATLAB 语言编写 S 函数1.1 主程序1.2 子程序 2. S 函数的应用 一、Simulink 系统仿真实例 下面的应用实例我们将分别采用不同建模方法为系统建模并仿真。例如&#xff0c;…

博客质量分计算——发布 version 5

目录 1. 背景2. 质量分 version 52.1 version 4 存在问题分析2.2 version 5 改进2.3 消融分析2.3.1 正向积极得分消融实验2.3.2 正向累积得分单变量实验2.3.3 非高分文章消融实验 2.4 V4 和 V5 版本质量分分布对比 3. 总结4. 参考 1. 背景 博客质量分顾名思义是用于衡量一篇博…

现代物理工程选讲:辐射探测与测量----射线与物质相互作用

重带电粒子与物质相互作用 与靶物质核外电子发生库伦相互作用电子获得能量脱离原子核的束缚&#xff08;或跃迁到高能级&#xff09;&#xff0c;从而被电离&#xff08;或激发&#xff09;每次碰撞只损失很小一部分能量&#xff08;~1/500)径迹是直线 阻止本领 Stopping Pow…

【Kubernetes资源篇】Secret加密数据配置管理详解

文章目录 一、Secret加密配置理论知识1、Secret是什么?2、Secret和configMap的区别3、Secret的参数和类型 二、实践&#xff1a;使用Secret进行加密1、方式一&#xff1a;环境变量方式引入2、方式二&#xff1a;卷挂载方式引入 一、Secret加密配置理论知识 1、Secret是什么?…

西安石油大学Python期末复习

Python期末复习 一、单选题 1. Python语言属于(C) A.机器语言 B.汇编语言 C.高级语言 D.以上都不是 2.Python 解释器环境中&#xff0c;用于表示上一次运算结果的特殊变量为(B) A. : B. _ C. > D.# 3.为了给整型变量x、y、z赋初值10&#xff0c…

Codeforces Round 868 (Div. 2) F. Random Walk(树上期望)

题目 n(n<2e5)个点的树&#xff0c; 从起点s出发&#xff0c;每次等概率选择一条边&#xff0c;随机游走到相邻点 若走到t&#xff0c;则停止&#xff0c;问每个点经过的期望次数&#xff0c;答案对998244353取模 思路来源 DLUT_Zeratul讲解 题解 需要分成三部分考虑…

Spring面试题--Spring中的循环引用(循环依赖)

我们以上述代码为例分析一下死循环产生的过程 为什么A是半成品呢&#xff1f; 如果熟悉bean的生命周期&#xff0c;那么在实例化对象A的时候&#xff0c;首先去调用的是构造函数&#xff0c;像是依赖注入还有接口的实现重写什么的&#xff0c;还有后置处理器&#xff0c;初始化…

【笔记】微机原理及接口技术3 -- 中断技术与DMA控制器

目录 中断技术中断概述中断处理过程 可编程定时器与计数器DMA 控制器8237A 结构工作方式工作时序 中断技术 中断概述 中断的流程是&#xff1f; CPU 正在执行进程 A此时外部或者内部中断请求发生&#xff0c;CPU 响应中断进程 A 暂时中断执行&#xff0c;转而运行中断服务程序…

华为OD机试真题 Python 实现【核酸检测人员安排】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、补充说明五、Python算法源码六、效果展示1、输入2、输出 一、题目描述 在系统、网络均正常的情况下组织核酸采样员和志愿者对人群进行核酸检测筛查。 每名采样员的效率不同&#xff0c;采样效率为N人/小时。 由于外界变化&…

本地springboot项目上传到gitee

1.在gitee上新建一个仓库&#xff1a; 创建后可以拿到仓库地址&#xff1a;https://gitee.com/ouyangshuiming/linux_test.git 2. 选中 创建git仓库 3. 4.最后一步&#xff1a; 一定记得这里要写上一段话&#xff0c;才能成功提交&#xff1a;比如git 提交远程库 最后刷新…

MySQL的Join

1.Join用法 Join连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接。 内连接又叫等值连接,此时的inner可以省略。 USING语句 MySQL中连接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name。当模式设计对联接表的列采用了相同的命名样…

React hooks文档笔记(四) useRef

useRef 当想让组件记住一些信息&#xff0c;又不想触发新的渲染&#xff0c;可以使用ref&#xff1a;总是返回同一个对象。 1. state 和 refs 的比较 refs&#xff08;普通的 JavaScript 对象&#xff09; state 更改时不触发重新渲染 更改时触发重新渲染 可变的——修改/…