0

main() を使用してファイルから読み取り、とint arr[S1][S2]がファイルから決定される 2D 配列を占有するとします。この配列を関数に渡したい場合、多次元配列を関数パラメーターとして正しい境界と.S1S2S1S2

int some_function(int arr_copy[S1][S2], ...);

int main()
{
/* read file and occupy arr[S1][S2] */
}

S1S2が定義されていないため、明らかに上記は問題です。

4

2 に答える 2

3

明らかな解決策は、 に基づいて Matrix クラスを作成し std::vector、それを使用することです。const次に、行列への(おそらく) 参照を取得する関数を宣言し、それで完了します。どの方法よりもはるかに簡単で、安全です。

で C スタイルの配列をどうしても使用しmainたい場合は、関数をテンプレートとして定義できます。

template <size_t S1, size_t S2>
int
some_function( int const (&array)[S1][S2], ...) ...

コンパイラは、渡された配列の宣言の実際の値を決定しS1ます。S2

于 2013-01-30T11:42:16.190 に答える
1

配列を渡す必要がある場合、関数はint*境界に対してと2つの引数を取る必要があります。参照(またはconst参照)によって渡される配列のコンテナークラスを使用することをお勧めします。

編集:そのすべてについて、Jamesがテンプレートで推奨することを実行します。:-)

于 2013-01-30T10:51:58.667 に答える