1) Arrays in C are really pointers - an array name refers to the memory location of the first element. This means arrays can be passed by value like pointers while still allowing modification of elements.
2) Multidimensional arrays are arrays of arrays stored sequentially in memory in row-major order. Subscripting a multidimensional array involves pointer arithmetic using the sizes of each dimension.
3) When passing multidimensional arrays to functions, only the first dimension's size can be omitted as the other sizes are needed for pointer arithmetic on subscripts.