例として、配列の全要素を足すコードを書いてみます。

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])とも書くことができます。
配列は、先頭要素のポインタを関数へ渡しますよね。
多次元配列では、先頭要素自体が配列となっているため、このように書くことができます。

二次元配列関数

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