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

为什么... 为什么 展开
 我来答
林_ken
推荐于2018-03-29 · TA获得超过155个赞
知道答主
回答量:39
采纳率:0%
帮助的人:0
展开全部
计算机要求在给数组分配空间的时候知道你要分配多大,
你说的是静态数组,因为这些数组在编译的时候就已经得让计算机知道了,所以必须是常数。

另外一种是动态数组
在c++ 里面可以
int n=10;
int *arr = new int[n];
这样可以在执行的时候才告诉计算机你要的数组长度(动态数组)
依然没有改变上面说的那个原则,你必须在申请数组的时候明确告诉系统你要的数组的长度
L_o_o_n_i_e
2008-04-02 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5218万
展开全部
数组的长度一定要是常量,这是C语言的规定,别的计算机语言未必这样规定。

数组的长度为常量,便于编译器给数组变量分配存储单元。

这些写法都允许:
#define ARRARY_SIZE 1024
float a[ARRARY_SIZE];
char b[]="1234567";
int c[3];

某些计算机语言,允许函数和子程序里的数组长度是变量。编译器实际处理时,是动态分配。

所以,“数组的长度一定要是常量”,只是C语言的规定。并非“道理”上的“必须”。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangdsh
2008-04-01
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
希望以下关于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宏,这两个都可以用来定义常量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ecc7578
2008-04-01 · TA获得超过806个赞
知道小有建树答主
回答量:715
采纳率:0%
帮助的人:699万
展开全部
数组的长度确定存储空间的大小,如果不是常量,电脑不知道该怎么分配存储空间,分配多大.电脑显然还没到智能如人一样.所以就只能是常量了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式