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全部限定为只读,都不可以改写,如果一个开放对应的就可以被修改!


审核编辑:刘清

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

    关注

    5068

    文章

    19014

    浏览量

    303221
  • C语言
    +关注

    关注

    180

    文章

    7598

    浏览量

    136169
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49048
收藏 人收藏

    评论

    相关推荐

    C语言关键字分别发生在哪个阶段

    在编译的第一个阶段:预处理,对一些宏定义做替换。 第二个,constC语言中const 用于修饰只读变量,表示变量本身不能修改。 这个关键字
    的头像 发表于 11-24 10:31 62次阅读

    C语言中的socket编程基础

    Socket编程简介 Socket是一种通信机制,允许程序之间进行通信。在C语言中,socket编程是网络编程的基础。通过使用socket,程序可以发送和接收数据,实现不同计算机之间的通信
    的头像 发表于 11-01 16:51 240次阅读

    C语言关键字--typedef

    C语言关键字使用方法学习指南!
    的头像 发表于 10-07 12:44 171次阅读

    使用边缘AI和Sitara处理器进行关键字检测

    电子发烧友网站提供《使用边缘AI和Sitara处理器进行关键字检测.pdf》资料免费下载
    发表于 09-02 11:30 0次下载
    使用边缘AI和Sitara处理器进行<b class='flag-5'>关键字</b>检测

    typedef struct和直接struct的区别

    C语言中, typedef 和 struct 是两种不同的关键字,它们在定义和使用上有着明显的区别。 typedef struct 和直接 struct 在 C
    的头像 发表于 08-20 10:58 2458次阅读

    快速掌握C语言关键字

    C语言中的32个关键字你知道多少个?根据关键字的作用分为四类:数据类型关键字、控制语句
    的头像 发表于 07-06 08:04 303次阅读
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>关键字</b>

    C语言中的typedef的应用

    C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE。
    发表于 03-06 11:34 339次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>的typedef的应用

    关键字搜索文件夹中某个TXT文件

    文件夹中随时创造TXT文件,如何及时选出刚创造的文件?或关键字搜索出需要的TXT文件?
    发表于 02-06 15:22

    在NVM和本地\"内存中定义数组(静态 /global /local)的\"关键字是什么?

    在 NVM 和本地\"内存中定义数组(静态 /global /local)的\"关键字是什么? 还有与 32 位对齐的关键字怎么样。
    发表于 01-25 07:52

    如何解决C语言中的“访问权限冲突”异常?C语言引发异常原因分析

    如何解决C语言中的“访问权限冲突”异常?C语言引发异常原因分析  在C语言中,访问权限冲突异常通
    的头像 发表于 01-12 16:03 5081次阅读

    探讨多线程编程中的volatile关键字应用

    有时候,我们可能需要在指针类型之间进行转换,而编译器会认为这是不安全的操作,从而导致编译错误。使用volatile关键字可以告知编译器,这个类型转换是有意义的,不应该引发错误。
    发表于 12-27 13:53 420次阅读

    C语言中结构体能不能相加

    C语言中,结构体能不能相加?
    的头像 发表于 12-19 17:04 1213次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>结构体能不能相加

    你还记得这个C语言关键字吗?

    当你使用volatile关键字时,你告诉编译器该变量的值可能会在程序的执行过程中被外部因素更改,因此编译器不应该对该变量的读写进行优化。下面是一些使用volatile的例子,以及对它们的一些文字描述
    的头像 发表于 12-17 08:00 332次阅读
    你还记得这个<b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>关键字</b>吗?

    vlookup提取关键字匹配多个结果

    是它能够基于关键字匹配提取多个结果。 当使用VLOOKUP提取多个结果时,需要遵循以下几个重要步骤。首先,您需要确保数据的组织和结构正确。数据应以表格格式排列,左侧为关键字列,右侧为相应的信息列。 首先,让我们考虑一个实际的例子。假设您有一个大型数据集
    的头像 发表于 12-01 10:40 2342次阅读

    c语言中decimal的含义

    C语言中的“decimal”是一种数据类型,用于表示十进制数字。在C语言中,常用的数据类型有整数类型(int)、浮点类型(float和double)、字符类型(char)等,而deci
    的头像 发表于 11-30 10:57 2293次阅读