很难将二维数组传递给函数

时间:2013-01-10 01:34:43

标签: c

所以我正在研究这段代码,其中我试图将二维数组传递给函数,如下所示:

function signature:void f(array [4] [4],int n);

int array [4][4];
f(&array[0][0],16)
for (int i=0;i<n;i++) // I'm working by c99 standard.
{
 hist[ *(&array[0][0] +i) ] ++ ;  // I know the max value in array[4][4] , and hist is initialized accordingly.
}
}

我只是不断收到有关不兼容类型的各种错误,例如,我得到“expected(*)[4]但类型是int * 救命 ? :)

1 个答案:

答案 0 :(得分:0)

&array[0][0]是一个int指针。

指针无法转换为二维数组。因此,您需要像f(array, 16)一样传递它。基本上你传递的是int*而且与int[][4]不兼容。

值得指出的是,这对于一维数组是有效的(虽然这是不必要的并且可能令人困惑):

void g(int x[]) {}
int arr[4];
g(arr); //valid of course
g(&arr[0]); //also valid

This解释了为什么它与多维数组不同。