ホームページ >バックエンド開発 >C++ >C 配列を可変サイズで初期化するとエラーが発生するのはなぜですか?

C 配列を可変サイズで初期化するとエラーが発生するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-19 08:53:09789ブラウズ

Why Does Initializing a C   Array with a Variable Size Result in an Error?

Array[n] vs Array[10]: 変数と数値リテラルによる配列の初期化

C では、コードにあるように、サイズとして変数を含む配列以下:

int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

エラーは次のとおりです:「可変サイズのオブジェクト 'tenorData' は初期化されていない可能性があります。」これは、C では可変サイズの配列が許可されていないためです。

G では拡張機能としてこの動作が許可されていますが、技術的には C 標準に準拠していません。この問題を解決するには、メモリを動的に割り当てるか、標準コンテナを使用します。

動的メモリ割り当て

int n = 10;
double* a = new double[n];

必ず delete [] を使用して割り当てられたメモリを解放してください。 a;

標準コンテナ

int n = 10;
std::vector<double> a(n);

定数配列

適切な配列が必要な場合は、ではなく定数値で初期化されます。変数:

const int n = 10;
double a[n];

C 11 では、関数から配列サイズを取得するときに constexpr を使用できます:

constexpr int n()
{
    return 10;
}

double a[n()];

以上がC 配列を可変サイズで初期化するとエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。