2

これを使用して利点を理解しようとしています...

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;
}
4

3 に答える 3

5

必須の注意事項:

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

あなたがそこに持っているものを打ちます。

実際の答え:

そのメリットは、

double *x = new double[n];

合法ですが、

double x[n];

コンパイル時の定数でない限り、そうではありませんn(あなたの場合はそうではありません)。

C++ は可変長配列をサポートしていません。

于 2012-10-11T16:19:09.590 に答える
0

動的に割り当てられた配列が大きすぎる場合、スタック オーバーフローは発生しません。

ポインターはスタック上にありますが、内容はヒープ上にあります。ただし、欠点としては、間接化によるアクセスの遅さ、メモリ リークの可能性、コードの侵入が困難になることが挙げられます。

于 2012-10-11T16:37:07.343 に答える
0

動的割り当てにより、多くのことが可能になります。

  • まず、この配列を作成した関数から返すことができます。

  • Strict C(C89) では、動的スタック割り当ては許可されません。double x[n]多くのコンパイラでエラーがスローされます。

于 2012-10-11T16:20:10.417 に答える