6

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

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

所以我用 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;
}

这个程序有效。我不明白它是如何工作的。这里的大小是什么时候确定的?在这种情况下如何分配向量?

4

2 回答 2

8

据此(强调我的)

ISO C99 允许可变长度自动数组,作为扩展,GCC 在 C90 模式和 C++ 中接受它们。这些数组的声明与任何其他自动数组一样,但其长度不是常量表达式。存储在声明点分配,并在包含声明的块范围退出时释放

请注意,这只是一个扩展,不适用于每个编译器,例如它在 MSVC 中对我不起作用(我收到错误“表达式必须具有常量值”)。

于 2018-12-13T10:53:14.670 回答
-2

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

数组的大小必须是常量整数。

所以你可以用两种方式定义它

1.#定义马克龙

#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];
   ...
      ...
}
于 2018-12-13T12:06:57.867 回答