- 常量的介绍以及作用
- const修饰符的使用
- 指针常量和常量指针的区别
- C和C++中const的区别
常量的介绍以及作用
我们在学习C语言中介绍过变量,也知道变量的定义与初始化的过程。常量则是和变量相对,顾名思义变量即为可改变的量,常量即为保持不变的量。专业点说即为“是否只读”,例如数字就是最常见的常量,比如20,20代表的含义就是20,20不能代表30 也不能代表40(别杠宏定义)
常量在C语言中又分为三种类型:整型常量、实型常量和字符常量。其中整形常量又可分为长整型常量、短整型常量等等(本文不主要将这些所以略过)。例如1000,3.1415,‘a’,这些都是常量。
- 那么,常量有什么作用呢?
首先常量表现为只读,就如同宇宙中光速恒定一般,想让一个数作为规则般不能被修改的话,即可以引入常量,可以将一个变量变成常量(使用const修饰符)这样子可以大幅度的提高代码的可读性和维护性,防止在使用过程中被修改导致意外发生。
- 那为什么不用#define?
#define作为预处理语句虽然也可以实现常量的效果,但是及其容易造成边界效应的出现。
例如在如下计算时会出现实际运算变为3+3*2,实际计算结果出错的问题,因此在使用#define时需要使用小括号提高运算优先级。
- 常量还有什么用途?
- 常量除了只读的特性之外,常量是会单独开辟一段内存空间存放,这段空间被称为常量区,是内存五区之一。对于学习嵌入式来说,常量区的数据读取速度更快,可以有效的减少CPU的负荷。尤其是例如正弦表、寄存器配置等内容庞大的数据可以选择放在常量区以便于读取时更加快速,以及保证不会被意外修改。
- 常量在嵌入式编程中大范围的使用。

const修饰符的使用
const修饰符的作用是将变量修饰为常量,使用方法如下,在定义变量时加上前缀const,改变量即变为常量,只读不能修改其值。
值得注意的是,由于常量的值不可修改,因此我们在定义的时候就必须确定其初始值,否则编译器会报错,其次我们在使用过程中也不能修改其值。
我们可以给所有的变量加上const修饰,包括字符型,浮点型,整型,亦或者自己定义的结构体等等。
#include
#include
int main()
{
const int m = 30;
const char p = 'a';
const double s = 3.14159;
}
指针常量和常量指针
如图所示,p1和p2均报错,但是二者报错的位置和原因并不一样。当我们使用const int * 定义的p1时,我们认为我们是创建了一个指针变量,这个指针变量指向了一个常量,因此我们不能通过解引用的方式去修改指针的值,可以理解成是 (const int )类型的指针。但是由于指针本身是一个变量,因此我们修改指针指向的值,例如可以修改p1从原来的m地址为s地址。这被称为指针常量。
而int * const 则认为:我们创建了一个常量,这个常量的类型是int *型,因此我们不能修改p2从m的地址到s,但是我们可以通过解引用的方式来修改p2所指向的内容,但是p2本身(指向m的地址)并不能被修改,这称作常量指针。
C和C++中const的区别
由于const最早出现在C++中,为了替代#define预编译的作用,后来被移植到了C语言中,实际上C++中的const真正的做到了只读的效果,即通过其他方式(我没找到)并不能修改由const修饰后的变量。
而C语言中,我们虽然也不能直接的修改const修饰后的变量,但是我们可以通过其他的方式,例如利用指针的间接内存访问的方式来修改我们的变量。


所以在C语言中使用const一定要注意也可以通过一些间接内存访问来修改const所修饰的变量。


登录 或 注册 后才可以进行评论哦!
还没有评论,抢个沙发!