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