如果我只能创建一个数组,为什么需要动态内存分配?

时间:2018-12-13 10:50:23

标签: c++ variable-length-array static-memory-allocation

我正在阅读有关动态内存分配和静态内存分配的信息,发现以下有关动态内存分配的信息:

  

在前几章中看到的程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的。但是在某些情况下,只能在运行时确定程序的内存需求。例如,何时需要的内存取决于用户输入。

所以我用C ++编写了以下程序:

#include <iostream>

int main()
{
  int n = 0;
  int i = 0;

  std::cout << "Enter size: ";
  std::cin >> n;
  int vector[n];

  for (i=0; i<n; i++)
  {
    vector[i] = i;
  }

  return 0;
}

该程序有效。 我不明白它是如何工作的。 何时确定尺寸? 在这种情况下,如何分配向量?

2 个答案:

答案 0 :(得分:8)

根据this(强调我):

  

ISO C99中允许使用可变长度自动数组,并且   扩展GCC在C90模式和C ++中接受它们。这些数组是   与其他任何自动数组一样声明,但长度为   不是一个常量表达式。 存储已分配到   当包含   声明退出

请注意,这只是扩展,无法在所有编译器上使用,例如,它不适用于我在MSVC中(我收到错误消息“表达式必须具有恒定值”。)

答案 1 :(得分:-2)

以上代码将在最新版本的编译器中生成错误。此代码将在旧版本的DOSBOX中工作。

数组的大小必须为恒定整数。

因此您可以使用两种方法对其进行定义

1.#define Macron

#include<iostream>
#define n 5

main() {
   ...
      ...
      int array[n];
}

2.const关键字

#include<iostream>
....
main() {
   int x;
   cout << "Enter Size Of Array";
   cin >> x;

   const int n = x;

   int array[n];
   ...
      ...
}