看有些书籍上说,下面的使用方法是不可以的:
constint n=5;
inta[n];
书上是这样解释的:const限定词真正的含义是“只读”,用它限定的对象在运行时是不可以赋值修改的,对象可以是基本类型,也可以是指针。因此用const限定的对象并不是完全意义上的常量,不能用作数组维度、case行标或类似环境。在这点上C和C++不一样,如果你真正需要编译时常量,请使用预处理宏#define来定义。
上面文字有两点可以点出:
1) const限定的对象在运行时是不可以赋值修改的;
2) 不能用作数组维度、case行标或类似环境;
编写代码来验证是否像上面所说的,代码如下:
1#include <stdio.h>
2
3int main(){
4 const int n=10;
5 int a[n]; //note1
6 printf("const testsuccess!\n");
7 n=11; //note2
8 switch(n){//note3
9 case 1:
10 printf("constswitch 1!\n");
11 break;
12 case 10:
13 printf("constswitch 10!\n");
14 break;
15 default:
16 printf("constdefault!\n");
17 }
18 return 1;
19 }
编译和执行如下:
zzl@SOFT30-46:~/test/test_const$ gcc -g test_const.c -o test_const
test_const.c: In function ‘main’:
test_const.c:7:2: error:assignment of read-only variable ‘n’
此编译报错使const限定的对象在运行时是不可以赋值修改的得到验证。修改上面错误代码继续编译,如下:
1 #include <stdio.h>
2
3int main(){
4 const int n=10;
5 int a[n]; //note1
6 printf("const testsuccess!\n");
7 //n=11; //note2
8 switch(n){//note3
9 case 1:
10 printf("constswitch 1!\n");
11 break;
12 case 10:
13 printf("constswitch 10!\n");
14 break;
15 default:
16 printf("constdefault!\n");
17 }
18 return 1;
19 }
编译执行:
zzl@SOFT30-46:~/test/test_const$ gcc -g test_const.c -o test_const
zzl@SOFT30-46:~/test/test_const$ ./test_const
const test success!
const switch 10!
这里竟然编过、执行OK。和第2点描述不符,可能时间的原因,C从C++汲取了:const修饰的常量变量可以用作数组维度、case行标或类似环境。结束!