使用指针进行数组动态内存分配的好处

时间:2012-10-11 16:17:53

标签: c++ arrays memory pointers

我试图了解使用此功能的好处......

double *x = new double[n];

而不只是使用这个......

double x[n];

由于

#include <iostream>

using namespace std;

main()
{
    int n;
    cout<<"# of elements in array"<<endl;
    cin>>n;

    double *x = new double[n]; //or double x[n]

    int i;

    for(i=0;i<n;i++)
    {
        cout<<x[i]<<endl;
    }
    return 0;
}

3 个答案:

答案 0 :(得分:5)

强制性说明:

std::vector<double> x(n);

击败你拥有的东西。

实际答案:

好处是

double *x = new double[n];

是合法的,而

double x[n];

不是,除非n是编译时常量(在你的情况下,它不是)。

C ++不支持变长数组。

答案 1 :(得分:0)

动态分配可以为您提供很多帮助。

  • 首先,您可以从创建它的函数返回此数组。

  • 严格C(C89)不允许动态堆栈分配。 double x[n]会在许多编译器上抛出错误。

答案 2 :(得分:0)

如果动态分配的数组太大,则不会导致Stack Overflow

指针存在于堆栈中,但内容存在于堆上。然而,缺点包括由于间接导致访问速度较慢,可能存在内存泄漏以及更难以通过的代码。