0
int func(int arr[100][150], int rows, int columns);
int func(int arr[100][150], int rows, int columns)
{
   //stuff here
}

この機能は動作します。arrサイズをarr[rows][columns]に割り当てたいが、常に100と150に割り当てたくない場合は、どうすればよいですか?100と150に割り当てると、行と列が小さい場合よりも多くのメモリを使用する可能性がありますか?

int func(int arr[rows][columns], int rows, int columns);
int func(int arr[rows][columns], int rows, int columns)
{
   //stuff here
}

また

int func(int arr[][], int rows, int columns);
int func(int arr[][], int rows, int columns)
{
   //stuff here
}

動作しません。

4

2 に答える 2

2

最初に寸法を渡します。

int func(int rows, int columns, int arr[rows][columns])
{
    …
}

(実際には、最初の次元は省略できます。アドレスを計算するには、最初の次元の後の次元が必要です。)

于 2012-10-15T15:58:38.540 に答える
0

Ericのコードは機能します。これを行う別の方法(私が好む方法)は、明示的な配列パラメーターを次のようなポインターに置き換えることです。

int func(int* x, int rows, int columns)
{
        //...
}

このようにして、この関数は1D配列と2D配列の両方に使用できます。これは、エリックが出した答えの単なる代替案です。個人的な好みや特定のアプリケーションに応じて、どちらかを使用できます。

于 2012-10-15T18:03:33.270 に答える