0

私が作成した場合

char a[100][100];

関数 void func(char** a); に送信します。char ( )[100] は char * に変換できないと書かれています。

char [100][100] はポインターへのポインターのようなものだと想像しました。私は間違っていましたか?

ありがとう

4

2 に答える 2

2

はい、あなたは確かに間違っていました。achar[100][100]は(100の配列)の配列であり、関数に渡すと、(100の配列)charへのポインタに変換されます。関数の引数として渡されたときの配列のポインターへの変換は、配列の最も外側のレベルにのみ影響します。charchar (*)[100]

そのタイプのパラメーターを取るものとして関数を宣言することもできます。

void func(char (*)[100]);

常に100列の配列を渡す場合、または関数の型を保持する場合は別の引数を渡す必要がある場合。

于 2012-10-04T19:20:39.883 に答える
2

シンプルに保ち、次のように宣言できます。

void func(char a[100][100]);

システムが可変長配列をサポートしている場合、次のようなことができます。

void func(int nRows, int nCols, char a[nRows][nCols]);

2 番目の方法では、任意のサイズの 2 次元配列を関数に渡すことができます。

于 2012-10-04T19:41:01.993 に答える