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)
{
        //...
}

这样,该函数可用于一维和二维数组。这只是埃里克给出的答案的替代方案;根据个人喜好和具体应用,可以使用其中任何一种。

于 2012-10-15T18:03:33.270 回答