when we pass an array the compiler needs to know the size of its elements, not how many elements it has.
A two-dimensional array can be thought of as a one-dimensional array of elements (which just happen to be arrays themselves).
Thus the compiler needs to know the size of one of the elements.
Each element is a row of values so the compiler needs to know the type of elements and how many values (the number of columns) are in each row.