int a[2][3]
って、「整数2個の配列( int a[2]
)を 3個の配列( [3]
)にした、と読めるけどどうなのか1。 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf と比べて確認。
116ページのArray declaratorsの節によると、 T D[n]
という形式のときは「… array of T」となると書かれている。ここで T は int
で D は a[2]
、 n
は 3
なので、「整数3個の配列… 」となる。 … の部分は仕様上で “derived-declarator-type-list” と呼ばれている部分で、 T D
がどういう型かによって定められる。 int a[2]
は「2-array of int」だけど、 … は最後の int
は除くことになっているので、まとめると「2-array of 3-array of int」であって、「整数3個の配列の2個の配列」という意味になる。
なんとも歯切れの悪い定義だけど、 int
の何かを定義しているってことでこうなっているのだろうか。考え方としては、 「int D[3]
」 みたいな定義があるともうこれは整数3個からなる配列であり、D
をどう書くかでそいつをどう調理するかが決まるってだけ。 a[2]
と書けばそれを 2 個の配列にするし、 *a
って書けばそいつへのポインタになる。
-
添字でのアクセスを考えると違うだろってのはすぐ想像つくけど。↩