第1个回答 2008-04-02
数组的长度一定要是常量,这是C语言的规定,别的计算机语言未必这样规定。
数组的长度为常量,便于编译器给数组变量分配存储单元。
这些写法都允许:
#define ARRARY_SIZE 1024
float a[ARRARY_SIZE];
char b[]="1234567";
int c[3];
某些计算机语言,允许函数和子程序里的数组长度是变量。编译器实际处理时,是动态分配。
所以,“数组的长度一定要是常量”,只是C语言的规定。并非“道理”上的“必须”。
第2个回答 2008-04-01
希望以下关于const的问题分析能给你点帮助。。。
**************************************************************
问题:const变量 & 常量
为什么我象下面的例子一样用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢?
const int n = 5;
int a[n];
答案与分析:
1)、这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如5, “abc”,等,肯定是只读的,因为程序中根本没有地方存放它的值,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时维度必须是“常量”,“只读变量”也是不可以的。
2)、注意:在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是 ANSI C对数组的规定限制了它。
3)、那么,在ANSI C 语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。
第3个回答 2008-04-01
数组的长度确定存储空间的大小,如果不是常量,电脑不知道该怎么分配存储空间,分配多大.电脑显然还没到智能如人一样.所以就只能是常量了.