C で 2 次元配列への参照を渡す
C では、2 次元配列への参照を関数に渡すのは難しい場合があります。次のコードを考えてみましょう:
<code class="cpp">const int board_width = 80; const int board_height = 80; void do_something(int[board_width][board_height]& array); //function prototype</code>
このプロトタイプは g からエラーを生成します:
error: expected ‘,’ or ‘...’ before ‘*’ token
エラーの説明と解決策
このエラーは次のことを示していますアスタリスク (*) が配置されている場所に何かが欠けていることを示します。参照の宣言では、代わりに次の構文を使用する必要があります:
<code class="cpp">void do_something(int (&array)[board_width][board_height]);</code>
配列の周りに括弧を追加することで、2 次元配列全体への参照を作成します。これにより、関数 do_something で配列を直接変更できるようになります。
ポインタ宣言との違い
これは、ポインタ型を使用したパラメータの宣言とは異なることに注意してください。
<code class="cpp">void do_something(int array[board_width][board_height]);</code>
この場合、board_width を無視して、2 次元配列の最初の部分配列へのポインターのみが渡されます。これは、C の配列が関数に渡されるとポインターに変化するためです。プロトタイプでは参照が明示的に要求されているため、この宣言は正しくありません。
サイズの計算
参照を使用する場合、関数内の sizeof(array) は sizeof を生成します。 (int[ボード幅][ボード高さ])。対照的に、ポインターベースの宣言を使用すると、ポインターのサイズに対応する sizeof(int(*)[board_height]) になります。
以上がC で 2 次元配列への参照を正しく渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。