多次元配列を関数に渡すことができないことを理解する
次のコード スニペットを考えてみましょう。
#include <stdio.h> void print(int *arr[], int s1, int s2) { int i, j; for(i = 0; i < s1; i++) for(j = 0; j < s2; j++) printf("%d, ", *((arr + i) + j)); } int main() { int a[4][4] = {{0}}; print(a, 4, 4); }
このコード多次元配列 a を int ポインター int の配列を取る関数 print に渡すことを目的としています。 *arr[]。ただし、C では、このコードは次のエラーを生成します:
cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
説明:
この問題の核心は、互換性のないデータ型にあります。 a のような C スタイルの多次元配列は、ポインターの配列へのポインター int *arr[] に直接変換できません。 C では、 a のデータ型は int[4][4] で、整数の 2 次元配列を表します。一方、 int *arr[] は整数の配列へのポインタであり、各要素は整数へのポインタです。
解決策:
この問題を解決し、多次元配列を int ポインターの配列を受け取る関数に渡すと、コードを変更して多次元配列を明示的に次の配列に変換できます。ポインタ。これは、「多次元配列を C のポインターに変換する」という質問に対する受け入れられた回答で説明されているような手法を利用することで実現できます。
補足:
以上がC で多次元配列をポインターの配列として関数に渡せないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。