例として、配列の全要素を足すコードを書いてみます。
void sum(int a[2][3]){
int i,j,sum=0;
for(i=0;i<2;i++){
for(j=0;j<3;j++){
sum+=a[i][j];
}
}
printf("合計=%d\n",sum);
}
int main(void){
int a[2][3] = {{10,20,30},{40,50,60}};
sum(a);
return 0;
}
また、このように書くこともできます。
void sum(int (*a)[3]){
int i,j,sum=0;
for(i=0;i<2;i++){
for(j=0;j<3;j++){
sum+=a[i][j];
}
}
printf("合計=%d\n",sum);
}
int main(void){
int goukei;
int a[2][3] = {{10,20,30},{40,50,60}};
sum(&a[0]);
return 0;
}
一次元配列同様、多次元配列ではsum(a)はsum(&a[0])とも書くことができます。
配列は、先頭要素のポインタを関数へ渡しますよね。
多次元配列では、先頭要素自体が配列となっているため、このように書くことができます。

緑で塗られている箇所が先頭要素です。

