プログラミングにおいて、配列はデータのコレクションを格納するための重要なデータ構造です。多次元配列を扱う場合、多次元配列を関数に渡して要素の操作を実行する方法を理解することが重要です。
次の C コードを考えてみましょう。
void print(int *arr[], int s1, int s2) { // ... } int main() { int a[4][4] = {{0}}; print(a, 4, 4); }
このコードは、次の C コードを渡すことを目的としています。 int[4][4] 型の多次元配列 a を、整数 (int **) へのポインターの配列を期待する関数 print に渡します。驚くべきことに、このコードは C では正常にコンパイルされますが、 C では正常にコンパイルされません。
C では、エラーは明らかです:
cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
このエラーは次のことを意味します。 C では、多次元配列 (int[4][4]) から整数へのポインターの配列 (int **) への暗黙的な変換は許可されていません。これは、これら 2 つのデータ型は構造と解釈が根本的に異なるためです。
このエラーを修正するには、C の「配列アドレス減衰」と呼ばれる手法を使用できます。または、C で多次元配列をポインターの配列に明示的に変換します。 .
C:
int main() { int a[4][4] = {{0}}; print(a, 4); // Pass the base address of the multidimensional array (array address decay) } void print(int *arr, int s) { // ... }
C :
int main() { int a[4][4] = {{0}}; print(a, 4, 4); // Explicit conversion to an array of pointers } void print(int **arr, int s1, int s2) { // ... }
以上が多次元配列を C および C の関数に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。