0

だから私はこのコードに取り組んでおり、次のように2次元配列を関数に渡そうとしています:

関数シグネチャ : 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] but type is of int * help ? :)」と表示されます

4

1 に答える 1

0

&array[0][0]int ポインタです。

ポインターを 2 次元配列に変換することはできません。このため、 のように渡す必要がありますf(array, 16)。基本的に、 を渡していますがint*、これは と互換性がありませんint[][4]

これは 1 次元配列に対して有効であることを指摘しておく価値があります (ただし、これは不必要であり、混乱を招く可能性があります)。

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

これは、多次元配列と異なる理由を説明しています。

于 2013-01-10T01:37:02.653 に答える