全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2022-08-12 09:13

人气:

作者:admin

标签: 嵌入式  C语言  编译器 

导读:我们会发现两者的区别const一个注释的全局变量一个注释的局部变量,我们编译都能通过,不过使用全部变量的程序运行会报段错误,而局部变量的能够过得正确结果。对于通过指针修改...

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


审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信