本期来讲解一个c语言的关键字——const。
主要内容:
结合示例说明const的几种用法。
适合人群:
c语言初学者、嵌入式萌新。
const是c语言的常用关键字之一,是单词constant(翻译为“常量的”)的缩写,它限定一个变量不允许被改变,使用const在一定程度上可以提高程序的安全性和可靠性。
用法:在定义变量时加上const,修饰该变量为常变量。为什么叫做常变量呢? 因为const 修饰的对象原本是变量,但经过修饰将不能直接改变它的值(如常量一般);但又有变量的属性,所以叫常变量。
part 1
使用const修饰局部变量
比如在函数中定义以下内容:
const int b = 1;
上方这句话执行后,将不能再对b进行赋值来修改它的值了。所以被const修饰的变量一般需要进行初始化!为其提供初始值。
当const和指针定义结合在一起时,有即种经典组合形式,是必须要掌握的!
char a = 'a'; char b = 'b';① const char *p = &a;
(或写成 char const *q = &a;)② char * const r = &a;
以上两种形式的区别在于const修饰的空间不同,
表达式① const是修饰p的空间为只读,不可以修改p的值,但可以修改p的值。
即 *p = 5; ✖ p = &b;✔
表达式② const是修饰q的空间为只读,不可以修改q的值,但可以修改*q的值。
即 q = &b;✖ *q = 5; ✔
part 2
修饰函数的参数
根据const和指针结合形式,const修饰函数的参数也是分为三种情况
1、防止修改指针指向的内容
char *strcpy( char *to, const char *from );
给参数from 加上 const 修饰后,如果函数体内的语句试图改动指针from所指向的空间,编译器将指出错误。
2、防止修改指针指向的地址
void swap ( int* const p1 , int* const p2 )
指针p1和指针p2指向的地址都不能修改。
3、以上两种的结合。
void func(const int *const p);
这种情况下,在函数体中将不能改变p的值,亦不能改变*p的值。
part 3
修饰全局变量
全局变量的作用域是整个文件,一般情况下要少用全局变量,若工程中的某一个函数改变了全局变量的值,它也会影响到工程中其他引用这个变量的函数,这导致不易排查bug。若必须使用全局变量,就需要考虑是否给该变量加上const,使其数值不被修改。
比如:
const int global_width = 320;part 4
可以修改只读变量的值吗?
不能直接通过原标识符修改(变量名),但可以通过非const修饰的指针,间接修改。
#include int main(void){ const int a = 1; //被const修饰的变量可以被初始化 int* p = &a; //a = 2; //被const修饰的变量不能被直接赋值 *p = 5; //可通过非const指针间接修改 printf(a = %d\\n, a); return 0;}运行结果:
高智能全项目多通道食品安全综合检测仪的介绍
电压互感器的概念及分类
物联网平台都能解决那些问题呢?
【应用场景】安科瑞电动机保护器产品在污水处理厂的应用
民用建筑电气设计中智能化消防应急照明系统的具体要求
C语言关键字const的几种用法
电子封装的作用
更加智能化的工业机器人,解放人类劳动
基于STM32的正交编码器驱动电机设计
小心山寨3G手机出骗招 低价承诺诱人上钩
MCU相关知识科普
8家企业在中国的氢能业务发展以及产业布局情况分享
飞利浦携Hue生态系统室外传感器亮相CES 2019
通过光电式水位开关实现电蒸锅缺水检测
叶盛基先生出席2020中国(深圳)国际汽车电子产业年会
长城汽车与意法半导体举办汽车电子交流日活动
小米在2018年面对的问题依旧非常严峻
Strategy Analytics:边缘计算在物联网部署中逐渐崛起
华强LED网采购会 商机无限 参与有奖
诺基亚为应对5G网络业务压力,下调2020年盈利预期