前言
const 在C/C++中的作用很大,可以提高程序的稳定性、安全性和可靠性。
const修饰变量和类型
该如何理解下面这些东西:
- const int a;//常量化变量a的值
- int const a;//常量化变量a的值
- const int *a;//常量化指针目标表达式,即无法改变指针指向的变量的值,但可以改变指针指向的地址
- int const *a;//常量化指针目标表达式,即无法改变指针指向的变量的值,但可以改变指针指向的地址
- int *const a;//常量化指针变量,即无法改变指针指向的地址,但可以改变指针指向的变量的值
- int const * const a;//常量化指针变量及其目标表达式,既不可以修改指针指向的变量的值,也不可以修改指针指向的地址
const修饰变量:常量化变量
常量化变量,是为了使得变量无法被更改,以下两种形式等价:
const <数据类型> 变量名 = [<表达式>]
<数据类型> const 变量名 = [<表达式>]
const int a = 10;
a = 20;//error
int const a = 10;
a = 20;//error
变量有const修饰时,想通过指针间接访问变量,指针也要有const的修饰:
const int * p = &a;
//int * p = &a;//error
const修饰指针:常量化指针目标表达式
一般形式如下:
const <数据类型> * <指针变量名称>[=<指针运算表达式>]
<数据类型> const * <指针变量名称>[=<指针运算表达式>]
int c = 10, d = 20;
const int *a = &c;
//*a = d;//error
a = &d;//OK
int c = 10, d = 20;
int const * a = &c;
//*a = d;//error
a = &d;//OK
常量化指针目标是限制通过指针改变其目标的数值 ,但<指针变量>存储的地址值可以修改。
const修饰指针:常量化指针变量
一般形式如下:
<数据类型> * const <指针变量名称>[= <指针运算表达式>]
int c = 10, d = 20;
int * const a = &c;
//a = &d;//error
*a = d;//OK
常量化指针变量使得<指针变量>存储的地址值不能修改。但可以通过 *<指针变量名称>修改指针所指向变量的数值。
const修饰指针:常量化指针变量及目标表达式
一般形式如下:
const <数据类型> * const <指针变量名> = <指针运算表达式>
int c = 10, d = 20;
int const * const a = &c;
//*a = d;//error
//a = &d;//error
常量化指针变量及其目标表达式,使得既不可以修改<指针变量>的地址,也不可以通过*<指针变量名称>修改指针所指向变量的值。
总结
- 就近原则:const离谁近,谁就不可以被修改;
- 定义const变量时,通常需要对其进行初始化,以后没有机会再改变其值;
- 合理使用关键字const,提高程序的安全性和稳定性。