4

フィットネス関数に必要な配列構造に頭を悩ませようとしています。これは配列の配列です:

double fitness[][2][9][11]

私の理解では、[2][9][11] 配列は 2 x 9 x 11 3 次元配列になります。それは問題ありませんが、[] は私をうんざりさせています。これは配列構造にどのように貢献しますか? 誰かがこれへの入力例を教えてくれませんか(または、私が投稿した配列が非常に大きいので、はるかに小さい次元である可能性があります)。

どうもありがとう。

編集: これは関数内にあります

4

2 に答える 2

3

次元数を減らすと少しわかりやすくなります。大胆に、1つの次元を除くすべてを削除し、宣言しましょう

 extern double foo[];

これが行うことは、不完全な型、未知の数のdoubleの配列を宣言することです。明示的な数の要素を指定すると、型は完全になります。違いは、sizeof不完全な型には適用できないことです。コンパイラは、それらが不完全であるため、それらのサイズを知ることができません。

ここで、配列の配列を宣言する場合、両方の次元を不明にすることはできません(のようにdouble foo[][])。何故ですか?以前は、コンパイラはfoo[42]doubleのサイズを知っているため(doubleは完全な型であるため)、の場所を計算できました。計算するfoo[1][42]には、要素タイプのサイズを知っている必要があります。つまり、要素タイプは完全である必要があります。Cでは、右端の次元が最も速く変化するため、ここでの要素タイプは、左端の次元を除くすべてによって与えられdouble [42]ます。元の質問では、ですdouble [2][9][11]

配列全体のサイズが必要ない場合は、1日の終わりに、左端の次元を空白のままにすることができます。

于 2012-09-03T14:47:55.270 に答える