为什么数组的长度一定要是常量?

为什么

计算机要求在给数组分配空间的时候知道你要分配多大,
你说的是静态数组,因为这些数组在编译的时候就已经得让计算机知道了,所以必须是常数。

另外一种是动态数组
在c++ 里面可以
int n=10;
int *arr = new int[n];
这样可以在执行的时候才告诉计算机你要的数组长度(动态数组)
依然没有改变上面说的那个原则,你必须在申请数组的时候明确告诉系统你要的数组的长度
温馨提示:内容为网友见解,仅供参考
第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
数组的长度确定存储空间的大小,如果不是常量,电脑不知道该怎么分配存储空间,分配多大.电脑显然还没到智能如人一样.所以就只能是常量了.
相似回答