私が作成した場合
char a[100][100];
関数 void func(char** a); に送信します。char ( )[100] は char * に変換できないと書かれています。
char [100][100] はポインターへのポインターのようなものだと想像しました。私は間違っていましたか?
ありがとう
はい、あなたは確かに間違っていました。achar[100][100]
は(100の配列)の配列であり、関数に渡すと、(100の配列)char
へのポインタに変換されます。関数の引数として渡されたときの配列のポインターへの変換は、配列の最も外側のレベルにのみ影響します。char
char (*)[100]
そのタイプのパラメーターを取るものとして関数を宣言することもできます。
void func(char (*)[100]);
常に100列の配列を渡す場合、または関数の型を保持する場合は別の引数を渡す必要がある場合。
シンプルに保ち、次のように宣言できます。
void func(char a[100][100]);
システムが可変長配列をサポートしている場合、次のようなことができます。
void func(int nRows, int nCols, char a[nRows][nCols]);
2 番目の方法では、任意のサイズの 2 次元配列を関数に渡すことができます。