0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样去使用C语言中的const关键字呢

冬至配饺子 来源:最后一个bug 作者:bug菌 2022-08-12 09:13 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

/***const是什么?***/

C语言中const是一个关键字,const字面的意思是“恒定的,不变的”,其主要的作用是const定义的变量,但又相当于常量,其值不允许被改变。

值得注意的是:

1)const修饰的变量的
生存周期为其定义到整个程序结束运行,不管是全局变量还是局部变量。

2)对于const变量在
初始化的时候就需要进行按我们的期望进行赋值,其他时候修改则会造成语法错误。

3)对于
const特性跟编译器相关,不过大部分是一致的!

4)const是在
编译的时候编译器进行的一些处理!

/***如何使用const?***/

一、C语言中const修饰的变量占用内存

我们先看加两个例子:

下图C语言

pYYBAGL1qK6AQjmdAABt1-vJyvw190.png

下图C++语言

poYBAGL1qMSAWll7AAB4Amh5CzA508.png

我们编译会发现C语言无法通过,主要是原因是我们定义const变量n并不是常量所以编译无法通过。所以用const定义的变量仅仅为只读变量,同样需要占用内存。而C++可以通过,而它相对比较复杂,这里不在展开描述!

二、const注释函数参数和返回值

我们通过修饰函数形参来保护传入的参数不被意外修改,有利于程序稳定性。我们一般不会用const修饰值传递,因为值传递是一个赋值的过程,在函数内部修改不会改变其值,所以不是很有意义;一般用const注释指针传递,防止内部修改导致外部变化,比如:void sFuc(const char *des,const char *src);这样就防止了des和src值的意外修改

修饰返回值一般用得比较少,采用const修饰返回值一般也不用于值传递,而是多用于指针传递!


三、const变量能通过指针修改吗?

我们通过下面两个例子:

pYYBAGL1qOGASIW4AAExAvqRXnQ540.png

我们会发现两者的区别const一个注释的全局变量一个注释的局部变量,我们编译都能通过,不过使用全部变量的程序运行会报段错误,而局部变量的能够过得正确结果。对于通过指针修改const的值是一种与编译器有关的行为,我们认为可以用指针修改堆栈上的局部变量,而全部变量const修饰以后为只读区域,如果程序访问则会导致异常!

四、const注释指针的终极奥义

我们把const处把右侧的语句括起来,去掉数据类型,括起来的内容是什么就是什么不能被修改。

如:

1)const int *pVar=&addr;根据上面的方法括起来的内容(* pVar)表示的是指针的内容,那么不能执行*pVar内容的修改,比如说*pVar=123;则编译会报错。不过可以修改指针的地址,比如pVar = &addr2;这样是可以修改的并且我们再次访问pVar的内容则变成了addr2的内容了。

2)同样intconst *pVar=&addr;跟上面是一样的处理办法。

3)int* const pVar=&addr;这个刚刚与前面的相反,其括起来的为(pVar)所以值能使用*pVar作为左值,不能修改pVar所指向的地址。

4)对于constint* constpVar=&addr则都不可进行修改!只能作为右值可读。

5)我们同样可以扩展下对于二级指针

constchar*const*constp全部限定为只读,都不可以改写,如果一个开放对应的就可以被修改!


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5212

    文章

    20801

    浏览量

    339118
  • C语言
    +关注

    关注

    183

    文章

    7650

    浏览量

    146517
  • 编译器
    +关注

    关注

    1

    文章

    1673

    浏览量

    52117
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    技术干货:EtherCAT设备ESI(XML)文件中的CompleteAccess关键字有什么作用

    EtherCAT 设备 ESI 文件中的 **CompleteAccess** 关键字控制主站是否通过一次邮箱通信(可能需分段)完整写入所有 PDO 配置。若该关键字使能,主站会尝试一次性完成
    的头像 发表于 05-28 17:32 190次阅读
    技术干货:EtherCAT设备ESI(XML)文件中的CompleteAccess<b class='flag-5'>关键字</b>有什么作用

    EtherCAT设备ESI(XML)文件中的CompleteAccess关键字有什么作用

    EtherCAT从站ESI文件中CompleteAccess关键字开启后,主站需通过一次邮箱通信完成全部PDO配置。但欧姆龙NX系列PLC不支持此方式,导致状态切换失败。关闭该关键字后,主站改用单
    的头像 发表于 05-20 16:27 250次阅读
    EtherCAT设备ESI(XML)文件中的CompleteAccess<b class='flag-5'>关键字</b>有什么作用

    C语言嵌入式系统编程注意事项-内存操作

    的输出参数。 (2)合理地使用关键字const可以使编译器很自然地保护那些不**被改变的参数,防止其被无意的代码修改,这样可以减少bug的出现。 constC++
    发表于 01-04 07:31

    单片机c语言中定义字节怎么定义?

    定义位可以用***it但是定义字节?还有就是比如汇编中的DPTR的DPH和DPL在c语言中怎样定义的
    发表于 12-29 06:32

    C语言C++的区别及联系

    缺点:性能比面向过程低。 二、具体语言上的区别 1、关键字的不同 C语言有32个关键字C
    发表于 12-24 07:23

    关键字volatile的含意

    关键字volatile有什么含意? 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心
    发表于 12-23 06:33

    Typedef在C语言中的应用

    Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义。也可以用预处理器做类似的事。例如,思考一下下面的例子: #define dPS struct s * typedef
    发表于 12-22 13:53

    interrupt关键字使用

    中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字
    发表于 12-22 09:36

    C语言中可以嵌套汇编语言吗?

    请问C语言中可以嵌套汇编语言吗?
    发表于 12-15 08:14

    Temu跨境电商按关键字搜索Temu商品API的应用及接口请求示例

    Temu跨境电商按关键字搜索Temu商品API的应用及接口请求示例 Temu跨境电商按关键字搜索Temu商品API的应用场景 Temu跨境电商平台按关键字搜索Temu商品API的主要应用场景包括但不
    的头像 发表于 11-29 15:08 904次阅读

    C语言的编程技巧

    、_Alignas关键字‌:C11标准引入了_Alignas关键字,用于显式指定类型的对齐方式,优化内存访问效率。 ‌5、_Generic关键字‌:
    发表于 11-27 06:46

    哪些场合会用到volatile关键字?

    当你理解 volatile关键字的含义之后,你就能明白,其实很多场合都能用到 volatile关键字。 1.全局变量单片机开发,难免会用到全局变量。一些初级工程师,更是全局变量满天飞。这种情况下
    发表于 11-25 08:19

    天眼查平台关键字搜索企业数据API接口技术指南

    ​ 一、接口概述 天眼查提供的企业搜索API接口,支持通过关键字查询企业工商信息、经营状态等核心数据。该接口采用RESTful架构,返回JSON格式数据。 二、接口认证 调用需使用API密钥认证
    的头像 发表于 11-21 11:48 1013次阅读
    天眼查平台<b class='flag-5'>关键字</b>搜索企业数据API接口技术指南

    亚马逊平台根据关键字搜索商品API接口

    ​  在电商开发中,集成亚马逊平台的商品搜索功能是常见需求。通过亚马逊的Product Advertising API(PAAPI),开发者可以根据关键字高效检索商品信息。本技术帖将逐步介绍如何调用
    的头像 发表于 11-05 15:00 594次阅读
    亚马逊平台根据<b class='flag-5'>关键字</b>搜索商品API接口

    micro 关键字搜索全覆盖商品,并通过 API 接口提供实时数据

    micro 关键字搜索全覆盖商品”并通过 API 接口提供实时数据
    的头像 发表于 07-13 10:13 1072次阅读