夜耿耿而不寐 2021-04-06 21:01 采纳率: 0%
浏览 330

C++——为什么变量不能作为数组长度?

我们学习C++中会发现,数组的长度不能用变量来表示,如下片断所示:

#include<iostream>
using namespace std;
void main()
{
    int length;
    cin >> length;
    int i = length,array[length];//此处会报错,visual studio2019上面报错如下:
                                 //表达式必须含有常量值,变量length(已声明)的值不可用作常量
    while (i)
    {
        cin >> array[i];
        i--;
    }
}

 为了实现这样的功能,C++里面增添了动态数组,用new和delete实现。

但是,为什么要这么麻烦呢?

难道直接像上面这样写不香么?

我本人的初步想法是内存空间这方面的问题。

求解,,,

  • 写回答

5条回答 默认 最新

  • lemon-l 2021-04-06 21:41
    关注

    局部变量用的都是栈的内存,栈内存有个特点,就是编译的时候就能确定大小,运行时就会自动分配,然后生命周期结束的时候会自动释放。假如数组设计成可以用变量去动态定义的话,这种使用方式就不符合栈内存的特点了,那它就不能使用栈,而得用堆,那你就得手动去释放内存。这样的话数组使用起来就不方便了。我想设计者主要是想提供两种不同的数组实现方式,一种用栈内存,一种用堆内存。想要使用方式简单的话就用栈,想要灵活分配内存的话就用堆

    评论

报告相同问题?

悬赏问题

  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64