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 サイトの他の関連記事を参照してください。