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; 如果你的亚马逊店铺还是表现平平…

Matlab实现MPC算法

模型预测控制&#xff08;Model Predictive Control, MPC&#xff09;是一种先进的过程控制方法&#xff0c;它使用模型来预测系统未来的行为&#xff0c;并基于这些预测来优化控制动作。在Matlab中实现MPC算法通常涉及到使用Matlab的MPC Toolbox&#xff0c;我们可以考虑一个线…

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…

【Qt】Qt和JavaScript使用QWebChannel交互

问题 问题一&#xff1a; 问题描述&#xff1a;运行时&#xff0c;Qt向Js端发送消息没有问题&#xff0c;Js端向Qt端发送消息时失败 报错&#xff1a;Cannot invoke unknown method of index -1 on object webTransport(0x…) 原因及解决办法&#xff1a;使用Qt 5.11.2编译生…

【基础】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;用…

内存序学习笔记(一)——表达式求值顺序

你知道为什么 i i 2 在 C17 前行为未定义吗&#xff1f; 你知道为什么 func(a(), b()) 中&#xff0c;a() 与 b() 的执行顺序为什么不是确定的吗&#xff1f; 这篇文章可以解答你的疑惑。 注&#xff1a;内容中包含作者自行理解的表述&#xff0c;请谨慎参考。 表达式求值 …

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

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

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

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

全文索引与虚拟列索引需要注意的事项

在 MySQL 中&#xff0c;全文索引 (FULLTEXT) 与 UNION ALL 可以一起使用&#xff0c;但有一些限制和注意事项。 限制与问题&#xff1a; 全文索引不能直接在 UNION ALL 中使用&#xff1a;MySQL 不允许在多个查询的 UNION 或 UNION ALL 操作中使用 MATCH ... AGAINST&#xf…

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

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

蓄水池漂浮物识别摄像机

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

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

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

【云计算】锐评国内五大公有云厂商及其OpenAPI

目录 一、概述 二、云平台分析 1、阿里云 2、腾讯云 3、华为云 4、天翼云 5、移动云 一、概述 博主曾深度使用过国内五大公有云厂商&#xff0c;对接过其提供的大量OPEN API接口&#xff0c;此文旨在客观评价云厂商的服务能力&#xff0c;推测其发展过程及技术实力&…

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

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

【经验分享】一个陌生的程序从第一行看发现不懂?教你正确的阅读顺序

很多新手在遇到一个陌生的程序的时候呢,都会从第一行开始读。发现根本看不懂。因为程序的最开始一般都是一些预处理命令,全局变量的定义,还有一些自定义函数的定义和声明部分。我自己看代码有一个习惯。我会从入口函数main开始看。这样才能知道程序最开始会干什么事,然后再…

重启、关闭系统

在Linux系统中&#xff0c;有多个命令可以用来重启和关闭系统。这些命令有不同的使用场景和特点&#xff0c;下面将详细介绍这些命令及其用法。 重启命令 1. reboot reboot是最常用的重启命令&#xff0c;它会立即重启系统。 用法&#xff1a; sudo reboot或者&#xff0c…

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

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

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

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