Если массив определен как int arr[ ROWS ][ COLS ];
, то любое обозначение массива arr[ i ][ j ]
может быть преобразовано в обозначение указателя как
*( arr + i * COLS + j )
Обратите внимание, что для выражения требуется только COLS, оно не требуетROWS. Итак, определение массива можно записать эквивалентно как
int arr [][ COLS ];
Но пропустить второе измерение недопустимо.
Дальнейшего понимания можно достичь, следуя трем примерамнижеприведенный.Во всех трех примерах одна и та же запись массива arr[ 2 ][ 3 ]
преобразуется в запись указателя.
Между A и B ROWS одинаков, но COLS отличается;результат = запись указателя отличается.
Между A и C ROWS отличается, но COLS одинакова;результат = запись указателя такая же.
Примеры:
A. int arr[ 4 ][ 7 ]; arr[2][3] = arr + 2 * 7 + 3 = arr + 17
B. int arr[ 4 ][ 5 ]; arr[2][3] = arr + 2 * 5 + 3 = arr + 13
C. int arr[ 6 ][ 7 ]; arr[2][3] = arr + 2 * 7 + 3 = arr + 17