gpt4 book ai didi

c++ - 理解c++中动态内存分配的使用

转载 作者:行者123 更新时间:2023-11-28 06:27:37 24 4
gpt4 key购买 nike

考虑这个程序:

#include <iostream>
using namespace std;

int main ()
{
int i;
cout << "How many numbers would you like to type? ";
cin >> i;

int * p;
p= new int[i];

cout << "Enter the numbers: \n";

for (int n=0; n<i; n++)
cin >> p[n];

cout << "You have entered: ";

for (int n=0; n<i; n++)
cout << p[n] << ", ";

delete[] p;

return 0;
}

还有这个:

#include <iostream>

using namespace std;

int main()
{
int num;

cout << "How many numbers would you like to type? ";
cin >> num;

int arr[num];

cout << "Enter the numbers: \n";

for (int a = 0; a <num; ++a)
cin >>arr[a];

cout << "You have entered: ";

for (int a = 0; a <num; ++a)
cout <<arr[a]<< ", ";
return 0;
}

两个程序都在完成相同的任务,而且 - 对我来说 - 后者很多
比前者更容易理解。现在我的问题是,为什么我们仍然需要动态内存分配?

最佳答案

num 不是编译器时间常量时,int arr[num]; 是 VLA(可变长度数组),这不是标准 C++。它是一些编译器提供的语言扩展(我假设您使用的是 G++)。

同样易于使用且不需要您使用原始指针和处理手动动态分配的东西是 std::vector :

int i;
cout << "How many numbers would you like to type? ";
if (!(cin >> i)) { // error checking is important
cout << "Not a number, abort!\n";
return 1;
}

std::vector<int> numbers(i);

cout << "Enter the numbers: \n";

for (int a = 0; a < i; ++a)
cin >> numbers[a];

关于c++ - 理解c++中动态内存分配的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28239304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com