C语言:不可变的变量不是常量?(const与define)

问题描述:

由于要用整型常量定义数组,我就用const定义了数组长度,结果编译错误:

#include
#include
/*#define n 5*/

int main()
{
const int n=5;
int rest[n] = {0,0,0,0,0};
printf("%d", rest[0]);
return 0;
}

error: variable-sized object may not be initialized

但当我用宏常量定义时就可以,这是为什么呢?难道不变的变量不是常量?常量不就是不变的量吗?

#include
#include
#define n 5

int main()
{
/*const int n=5;*/
int rest[n] = {0,0,0,0,0};
printf("%d", rest[0]);
return 0;
}
小弟菜鸟一枚,还请大家帮帮忙:)

不同的编译器不同,一些编译器,比如VC++,不允许用变量作为数组初始化的大小,比如
int n;
int a[n];
必须动态分配:
int n;
int *a = new a[n];

c语言不能在方括号中用变量表示数组大小,只能用常数或者常数表达式。不过,c++语言可以用常量表示。