开辟数组为何只能用常量,开辟动态数组却可以用变量?

element=newint*[row];//row可以是变量,这相当于开辟了一个动态指针数组而我们m[a][b];ab必须是常量,变量则报错... element = new int *[row];// row可以是变量,这相当于开辟了一个动态指针数组

而我们 m[a][b]; a b必须是常量,变量则报错
展开
 我来答
xingyunbuzui
2013-12-06 · TA获得超过1160个赞
知道小有建树答主
回答量:346
采纳率:100%
帮助的人:387万
展开全部
本质上变量有两种(按照内存分配方式不一样划分):
栈变量和堆变量。

栈变量:当生命周期开始时,会自动形成栈空间,分配栈变量。这种变量必须事先知道其大小。所以栈变量的大小必须是确定的。
堆变量:在进程空间中的专门开辟的堆空间中生成的变量。这部分可以动态生成,大小不限(当然要在进程空间占用限制之内)。

一般new出来的(c是malloc等)就是堆变量,而直接定义的则是栈变量。
堆变量的大小可在程序运行期动态指定。
而栈变量必须在入栈时静态制定,大小必须确定。

另:
1 生命周期在代码中(以C为语法),一般就是指大括号括起来的部分为一个独立生命周期,一般最多出现的就是函数,控制语句(for,while,if)后面跟的语句块。
2 栈空间对进程而言,空间是有限制的,如果程序大量分配栈变量,会栈移除。操作系统会报:“stack overflow”。注意:好的程序,尽可能少分配占较多内存的栈变量。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式