我正在阅读有关动态内存分配和静态内存分配的信息,发现以下有关动态内存分配的信息:
在前几章中看到的程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的。但是在某些情况下,只能在运行时确定程序的内存需求。例如,何时需要的内存取决于用户输入。
所以我用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;
}
该程序有效。 我不明白它是如何工作的。 何时确定尺寸? 在这种情况下,如何分配向量?
答案 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];
...
...
}