前言:
const 是 constant 的缩写,是恒定不变的意思,也翻译为常量、常数等。很不幸,正是因为这一点,很多人都认为被 const 修饰的值是常量。这是不精确的,精确的说应该是只读的变量,其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容。或许当初这个关键字应该被替换为 readonly。那么这个关键字有什么用处和意义呢?
在C语言中,const是一个关键字,用于声明常量。const关键字可以应用于变量、函数参数和函数返回值,用于指定它们的值不能被修改。
1. const修饰变量:
- 通过在变量声明前加上const关键字,可以将该变量声明为常量,其值在初始化后不能被修改。
- 常量的值必须在声明时进行初始化,并且不能再被修改。任何试图修改常量值的操作都会导致编译错误。
- 声明常量的语法:const 数据类型 常量名 = 初始值;
定义const只读变量,具有不可变性。例如:
const int Max=100;
int Array[Max];
这里请在VisualC++6.0里分别创建.c文件和.cpp文件测试一下。你会发现在.c文件中,编译器会提示出错,而在.cpp文件中则顺利运行。为什么呢?我们知道定义一个数组必须指定其元素的个数。这也从侧面证实在C语言中,const修饰的Max仍然是变量,只不过是只读属性罢了;而在C++里,扩展了const的含义,这里就不讨论了。
注意:const修饰的只读变量必须在定义的同时初始化,想想为什么?
留一个问题:case语句后面是否可以是const修饰的只读变量呢?请动手测试一下。
2. const修饰函数参数:
- 在函数声明或定义中,可以使用const关键字来修饰函数参数,表示该参数在函数内部不会被修改。
- 通过使用const修饰函数参数,可以增加代码的可读性和清晰度,同时也能够确保函数不会无意间修改传入的参数值。
- 声明带有const修饰的函数参数的语法:数据类型 const *参数名
(表示指针指向的值不可修改)或者 const 数据类型 参数名(表示函数内部不能修改参数的值)。
const修饰符也可以修饰函数的参数,当不希望这个参数值被函数体内意外改变时使用。例如:
void fun (const inti);
告诉编译器i在函数体中的不能改变,从而防止了使用者的一些无意的或错误的修改。
3. const修饰函数返回值:
- 在函数声明或定义中,可以使用const关键字来修饰函数的返回值,表示函数返回的值不能被修改。
- 通过使用const修饰函数返回值,可以向调用者明确表明返回的值是一个常量,不能进行修改操作。
- 声明带有const修饰的函数返回值的语法:const 数据类型 函数名(参数列表)。
const修饰符也可以修饰函数的返回值,返回值不可被改变。例如:
const int Fun(void);
在另一连接文件中引用const只读变量:
extern const inti;//正确的声明
extern const intj=10 ;//错误!只读变量的值不能改变。