C语言关键字用法实例详解——const(三)

C语言

文章目录

  • C语言
  • 前言
  • 一、const
  • 二、const和指针
    • const int *p1 或 int const *p1
    • int *const p2
  • 三、函数参数
  • 总结


前言

这篇文章来看一看const关键字

一、const

有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。
例如,用一个变量来表示表示缓冲区的大小。为了满足这一要求,可以使用const关键字对变量加以限定:

const int Num = 100; 

这样 Num 的值就不能被修改了,任何对 Num 赋值的行为都将引发错误:

Num = 90;  //错误,试图向 const 变量写入数据

我们经常将 const 变量称为常量(Constant)。创建常量的格式通常为:

const type name = value;
int main()
{    
int n = 90;    const int Num1= n;  //运行时初始化   const int Num2= 10;  //编译时初始化    }

二、const和指针

const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。const 和指针一起使用会有几种不同的顺序,如下所示:

const int *p1 或 int const *p1

这是一种“指向常量的指针”。指针 p1 指向的数据是常量,这意味着你不能通过 p1 修改它所指向的值,但你可以改变 p1 自身指向的地址

#include <stdio.h>int main() {int a = 10;int b = 20;const int *p1 = &a;  // p1 指向整型常量,不能通过 p1 修改 a 的值printf("Value pointed by p1: %d\n", *p1);// *p1 = 15;   // 编译错误:不能通过 p1 修改 a 的值p1 = &b;  // 这合法:p1 可以指向不同的地址printf("Value pointed by p1 now: %d\n", *p1);return 0;
}

p1本身的值(地址)可以修改(指向不同的数据),但它们指向的数据不能被修改。

int *const p2

#include <stdio.h>int main() {int a = 10;int b = 20;int *const p2 = &a;  // p2 是常量指针,指向 a,p2 的值(地址)不能被改变printf("Value pointed by p2: %d\n", *p2);*p2 = 15;  // 这合法:可以通过 p2 修改 a 的值printf("Value of a after modification: %d\n", a);// p2 = &b;  // 编译错误:不能改变 p2 的值(即不能使 p2 指向其他地址)return 0;
}

当然,指针本身和它指向的数据都有可能是只读的,下面的两种写法能够做到这一点

const int *const p4;//指向常量的常量指针:既不可以改变指针指向,也不可以修改指针所指向的内容。
int const *const p5;

三、函数参数

使用const修饰函数参数,表明该参数在函数内部不会被修改,增强了函数接口的清晰度和安全性。

void Value(const int value) {// 可以读取value,但不能修改valueprintf("%d\n", value); 
}void Change(int* const a, int* const b) {// 在此函数中,a和b的地址都不能更改,但可以通过它们交换指向内容的值int temp = *a;*a = *b;*b = temp;
}

函数返回const类型的指针,意味着返回的对象是不可修改的。

const char* get(void) {static char str[] = "const";// 返回一个指向常量字符串的指针return str; 
}

总结

使用const关键字定义常量名称时,建议使用大写字母,以区分常量与变量。
• 当需要传递不可修改的参数给函数时,使用const修饰指针或引用。有助于提高代码的可读性和安全性。例如:#define PI 3.14可以被替换为 const float PI = 3.14。
• 在函数参数和返回值中使用"const"关键字,以确保数据不被意外修改。有助于提高代码的安全性和可维护性。例如:void String(const char* str);
• 修饰全局变量,将全局变量声明为"const",确保在程序的任何地方都不会被修改。

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

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

相关文章

亚马逊逆袭:我是怎么让店铺从平庸到高增长的

今年的亚马逊Prime会员大促即将到来&#xff0c;对于各位卖家来说&#xff0c;这不仅代表着提升店铺主推商品排名、加速商品销量增长的机会&#xff0c;还意味着为年末其他大促活动提前引流获客的大好时机&#xff0c;绝对不容错过&#xff01; 如果你的亚马逊店铺还是表现平平…

DNN学习平台(GoogleNet、SSD、FastRCNN、Yolov3)

DNN学习平台&#xff08;GoogleNet、SSD、FastRCNN、Yolov3&#xff09; 前言相关介绍1&#xff0c;登录界面&#xff1a;2&#xff0c;主界面&#xff1a;3&#xff0c;部分功能演示如下&#xff08;1&#xff09;识别网络图片&#xff08;2&#xff09;GoogleNet分类&#xf…

【基础】Three.js 自定义几何体和复制几何体

通过自定义顶点数据&#xff0c;可以创建任意的几何体。像threejs的长方体BoxGeometry、球体SphereGeometry等几何体都是基于BufferGeometry类构建的&#xff0c;它表示一个没有任何形状的空几何体。 1. 自定义点模型 通过javascript 类型化数组 Float32Array创建一组xyz坐标…

pycharm破解教程

下载pycharm https://www.jetbrains.com/pycharm/download/other.html 破解网站 https://hardbin.com/ipfs/bafybeih65no5dklpqfe346wyeiak6wzemv5d7z2ya7nssdgwdz4xrmdu6i/ 点击下载破解程序 安装pycharm 自己选择安装路径 安装完成后运行破解程序 等到Done图标出现 选择Ac…

IMU腕带评估轮椅用户运动健康

近期&#xff0c;美国的研究团队利用惯性测量单元&#xff08;IMU&#xff09;和机器学习来准确评估手动轮椅使用者的运动健康状况&#xff0c;这在康复训练和慢性病管理领域具有广阔的应用前景。 研究小组将运用高性能的IMU传感器固定到轮椅使用者佩戴的手腕带上&#xff0c;用…

分享一套外链系统,付费进群系统

本系统特点&#xff0c;活码系统以及卡片系统&#xff0c;付费进群系统 分享一套外链系统其中带付费进群系统插件&#xff0c;前端做了美化

第90集《大佛顶首楞严经》

《大佛顶如来密因修正了义诸菩萨万行首楞严经》。监院法师慈悲&#xff0c;诸位法师&#xff0c;诸位同学&#xff0c;阿弥陀佛&#xff01; 请大家打开讲义197面 子一、现化表法 诵持『楞严神咒』在整个修学《首楞严王三昧》的过程&#xff0c;它所扮演的角色有两个&#x…

记录一下idea的一些使用技巧和遇到的异常(持续更新)

技巧 自己的模板——live template 有些代码在项目中通常会被用到或会被重复使用&#xff0c;可以自己写一个模板存起来&#xff0c;要用的时候用快捷键生成就可以了。 在这里选择生效范围 现在&#xff0c;就有我们自己的模板了&#xff0c;一回车就自动生成 idea的全局配置…

蓄水池漂浮物识别摄像机

蓄水池是重要的水资源储备设施&#xff0c;但常常会受到漂浮物的影响&#xff0c;影响水质和使用效果。为了及时监测和清理蓄水池中的漂浮物&#xff0c;蓄水池漂浮物识别摄像机 被广泛应用于各类水库、湖泊等场所。这种摄像机结合了图像识别技术和人工智能算法&#xff0c;能够…

照片信息的读取与分类(1)

通过Python的各种模块我们可以很方便的获取到文件的各种属性数据&#xff0c;比如文件修改时间、文件大小或是本节课获取到的照片拍摄时间等。获取到了这些数据后&#xff0c;我们就可以对文件按照需求进行移动、改名甚至删除等操作。配合Python批量处理文件的优势&#xff0c;…

elementUI table 给表头添加气泡显示(鼠标悬浮显示注释)

elementUI table 给表头添加气泡显示&#xff08;鼠标悬浮显示注释&#xff09; 前言&#xff1a;文档显示&#xff1a;&#xff08;使用插槽&#xff0c;我看看到底是怎么个事儿&#xff09;文档代码:修改后的效果&#xff1a;页面效果&#xff1a; 前言&#xff1a; 公司出现…

【ACM出版】2024年第四届工商管理与数据科学国际学术会议 (BADS 2024,10月25-27)

2024年第四届工商管理与数据科学国际学术会议(BADS 2024)将于2024年10月25-27日在中国重庆召开&#xff0c;大会由喀什大学支持。 在当今全球化与数字化迅速发展的时代&#xff0c;工商管理与数据科学作为推动经济增长和技术进步的重要力量&#xff0c;正以前所未有的速度交叉融…

骨传导耳机哪款好?精选五款热门骨传导耳机分享让你避免踩雷

目前在市面当中&#xff0c;骨传导耳机被称之为是黑科技耳机&#xff0c;骨传导耳机拥有很多优势&#xff0c;在听歌时不需要入耳&#xff0c;不会伤耳朵。随着骨传导耳机品牌的不断发展&#xff0c;人们在选购骨传导耳机时&#xff0c;也会觉得非常困难&#xff0c;可能一不小…

【知识图谱】4、LLM大模型结合neo4j图数据库实现AI问答的功能

昨天写了一篇文章&#xff0c;使用fastapi直接操作neo4j图数据库插入数据的例子&#xff0c; 本文实现LLM大模型结合neo4j图数据库实现AI问答功能。 废话不多说&#xff0c;先上代码 import gradio as gr from fastapi import FastAPI, HTTPException, Request from pydantic…

STM32CubeMX软件配置及点灯操作(基于STM32F4系列+HAL库)

注:本文主要记录一下STM32CubeMX软件的使用流程。 01 软件安装 1.keil 需要安装以下支持包(keil在线安装里没有对应芯片支持包)。 2.STM32CubeMX 安装库&#xff1a; 3.串口助手 02 硬件连接 该原理图来源于学益得在线课堂教学项目《RTOS项目实战&#xff1a;从PCB到Free…

STM32F407ZGT6单片机HAL库——DAC输出

一、输出直流电压 1.cubemax的配置&#xff08;通道1&#xff09; 2.直流电压大小计算 3.主函数加入初始化的程序 float DAC_voltage1.5;HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, DAC_voltage*4095/3.3);//HAL_DAC_Start(&hdac,DAC_CHANNEL_1); 二、…

(一)模式识别——基于SVM的道路分割实验(附资源)

写在前面&#xff1a;本报告所有代码公开在附带资源中&#xff0c;无法下载代码资源的伙伴私信留下邮箱&#xff0c;小编24小时内回复 一、实验目的 1、实验目标 学习掌握SVM&#xff08;Support Vector Machine&#xff09;算法思想&#xff0c;利用MATLAB的特定工具箱和库函…

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码 1 比赛时间 北京时间&#xff1a;2024年9月5日 18:00-2024年9月8日20:00 2 思路内容 2.1 往届比赛资料 【2022高教社杯数学建模】C题&#xff1a;古代玻璃制品的成分分析与鉴别方案…

AI学习记录 - 旋转位置编码

创作不易&#xff0c;有用点赞&#xff0c;写作有利于锻炼一门新的技能&#xff0c;有很大一部分是我自己总结的新视角 1、前置条件&#xff1a;要理解旋转位置编码前&#xff0c;要熟悉自注意力机制&#xff0c;否则很难看得懂&#xff0c;在我的系列文章中有对自注意力机制的…

OpenFeign请求拦截器,注入配置属性类(@ConfigurationProperties),添加配置文件(yml)中的token到请求头

一、需求 OpenFeign请求拦截器&#xff0c;注入配置属性类&#xff08;ConfigurationProperties&#xff09;&#xff0c;添加配置文件&#xff08;yml&#xff09;中的token到请求头 在使用Spring Boot结合OpenFeign进行微服务间调用时&#xff0c;需要在发起HTTP请求时添加一…