结论: 在c中是不可以的,在c++中可以。
证明:C++编译器把Const对象放在了符号表之中,C语言一般是放在只读数据区。【为什么C++编译器这么做?我想一个原因就是减少一些存储操作次数】。
//const.c
int main()
{
const int a = 100;
int arr[a];//error
printf("%d\n",sizeof(arr));
return 0;
}
/*总结:
在c中,const是指不能被改变的变量,占有存储空间,所以编译器并不知道编译时的值,
所以不知道该给数组定义多大的,而且数组定义时的下标必须为常量*/
//const.cpp
int main()
{
const int a = 10;
int arr[a]; //ok
cout<<sizeof(arr)<<endl;
return 0;
}
/*
***总结:
C++中的const可以看成是编译期的常量,编译器先不给它分配空间,只是在编译的时候把它的值保存在名字表中,
所以在定义数组时,已经可以知道它的值了,但是如果加上关键字extern或者取其地址,则会分配空间。
*/