I vaguely recall that for formal parameters of a function, you can specify all but one dimension of an array, and the one that isn't specified has to be the first dimension. A so-called array parameter of a function is actually a pointer. In the case of answer b, x is the address of (i.e., a pointer to) the first element in a one-dimensional array. In answer c, x is the address of the first row of a two-dimensional array, where each row has 12 elements. In memory, the first row would be 12 ints, then the second row of another 12 ints, and so on. For multi-dimensional array parameters, the compiler needs to know the 2nd index in a two-D array and 2nd and 3rd in a three-D array so that it can figure out how to access the elements in the array.