The question is unclear, but here are some thoughts.
There are no multidimensional arrays in the language, only one dimensional arrays are supported, with some additional guarantees. What is commonly referred to as 2D array is a 1D array of objects of type array of the given type. The additional guarantees are those of contiguity and alignment: each element in the array is contiguous with the next element in the array, and the array and the first element are aligned.
Arrays have a tendency to decay to a pointer to the first element, and you can use pointer arithmetic to move to the next elements in the array, which is what allows the syntax A + 2
meaning: &A[0] + 2
or a pointer that is the result of adding 2 to the first (zero-th) element in the array. But the decay is only of the top level array.
The guarantees laid out before mean that you can use the array as if it was a pointer to the first element, and that element is in exactly the same location as the array itself. Applying this recursively to the nested array you can get to the following:
int array[10][10];
// array is an array of 10 arrays of 10 int
// array[0] is an array of 10 int, the first subarray
// array[0][0] is an int, the first element of the subarray
int *p = &array[0][0];
int *q = p + 10; // One beyond the first subarray: pointer to the first
// element of the second subarray.
int *r = p + 10*row + col; // pointer to the col-th element inside the row-th subarray
// equivalent to &array[row][col]