ホームページ >バックエンド開発 >C++ >C で 2 次元配列への参照を正しく渡すにはどうすればよいですか?

C で 2 次元配列への参照を正しく渡すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-07 04:59:02385ブラウズ

How to Correctly Pass References to Two-Dimensional Arrays in C  ?

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

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