嵌入式技术
本期来讲解一个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 < stdio.h >
int main(void)
{
const int a = 1; //被const修饰的变量可以被初始化
int* p = &a;
//a = 2; //被const修饰的变量不能被直接赋值
*p = 5; //可通过非const指针间接修改
printf("a = %d\\n", a);
return 0;
}
运行结果:
全部0条评论
快来发表一下你的评论吧 !