读书笔记-只读变量与字面量常量的区别

在 C 语言中,使用 const 关键字修饰的变量定义语句,表示对于这些变量,我们无法在后续的程序中修改其对应或指针指向的值。因此,我们更倾向于称它们为“只读变量”,而非常量。

只读变量与字面量常量的一个最重要的不同点是,使用 const 修饰的只读变量不具有“常量表达式”的属性,因此无法用来表示定长数组大小,或使用在 case 语句中。常量表达式本身会在程序编译时被求值,而只读变量的值只能够在程序实际运行时才被得知。并且,编译器通常不会对只读变量进行内联处理,因此其求值不符合常量表达式的特征。

误用只读变量和常量会导致编译错误,下面这段代码展示了这类错误:

 

 1 #include <stdio.h>
 2 int main(void) {
 3   const int vx = 10;
 4   const int vy = 10;
 5   int arr[vx] = {1, 2, 3};  // [错误1] 使用非常量表达式定义定长数组;
 6   switch(vy) {
 7     case vx: {  // [错误2] 非常量表达式应用于 case 语句;
 8       printf("Value matched!");
 9       break;
10     }
11   }
12 }

 

posted @ 2023-01-07 09:46  Ben002  阅读(77)  评论(0编辑  收藏  举报