>>772
void aaa(int hoge[][10])
の場合、hoge[2][5]は*(hoge + 10 * 2 + 5)と書き換えられる。この中の10というのはもちろん2番目のの要素数。
2番目以降の要素数を省略できることにするとこの10と言う2番目の要素数も引数として受け取らなければならなくなるから。
(C99ではそこんところを明示的に引数にしてvoid aaa(unsigned num, int [][num]);のような記述が可能)

そして要素数の1番目は省略するのが普通。