任何长度的二维数组

时间:2012-10-15 15:48:23

标签: c arrays reference multidimensional-array

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
}

不起作用。

2 个答案:

答案 0 :(得分:2)

首先传递尺寸:

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

(实际上,第一个维度可能会被省略。第一个维度需要计算地址。)

答案 1 :(得分:0)

Eric的代码工作,另一种方法(我更喜欢)是用如下指针替换显式数组参数:

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

通过这种方式,该功能可用于1D和2D阵列。这只是Eric给出的答案的替代方案;可以使用任何一种,具体取决于个人喜好和具体应用。