When you pass an array to to a function, I read that you don't need to put the size of the array:

Code:
 void somefunc( int elem[ ] );
I thought about this and it made sense since when you initilize an array you don't need to specify its size, the compiler can figure that out by counting the each element. So in the same way, when the array is passed to the function, it copies each element and the compiler can figure out the size by counting the number of elements that were copied.

Code:
 int somearray[ ] = { 1, 2, 3, 4, 5, 6 };
So it made sense why you don't need the size when passing an array.
I went on reading about passing multidimenstional arrays to functions. I read that you don't need to specify the size of the first dimenstion but you need to with the last dimenstion:

Code:
 void somefunc( int elem[ ] [5] )
Now I was lost. Why do you need to specify the size of the last array? The book explained it like this, but i didn't understand it

note: the code that it is reffereing to is
Code:
 void display( float[DISTRICTS][MONTHS] ) 
void display( float[][MONTHS] )
Why doesn't the function need this size of the first dimension? Again, remember that a two-dimensional array is an array of arrays. The function first thinks of thE argument as an arrAy of districts. It doesn't need to know how many districts there are, but it does need to know how big each diestrict element is, so it can calculate where a particular element is (by multiplying the bytes per element times the index). So we must tell it the size of each element, which is MONTHS, but not how many there are, which is DISTRICTS.
Can someone please explain this to me?