0

所以我正在处理这段代码,我试图将一个二维数组传递给一个函数,如下所示:

函数签名: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.
}
}

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

4

1 回答 1

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

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

于 2013-01-10T01:37:02.653 回答