Because two-dimensional array is not the same as array of pointers. Extra compactness resulting in continuous memory leads to inability to do a subscript without knowing size of all dimension aside from first.
You need to declare your function as one of either:
For a little bit of insight, doing otherwise will lead to a segmentation fault. Really surprised something this can be done: http://codepad.org/rWhlSUXx
We don't know how many elements to move in the array before using the secondary dimension... I wonder what the compiler does in this case?