Почему при работе с двумерными матрицами только второй размер важен для компилятора? Просто не может получить мою голову вокруг этого.Спасибо
Потому что компилятору нужно выяснить, как получить доступ к данным из памяти. Первое измерение не важно, потому что компилятор может подсчитать количество элементов, когда указаны все остальные размеры.
Примеры:
int a1[] = { 1, 2, 3, 4 }
компилятор знает, что нужно выделить место для 4 целых чисел. Теперь с этим:
int a2[][] = { 1, 2, 3, 4, 5, 6} }
компилятор не может решить, должно ли это быть a2 [1] [6] или a2 [2] [3], или a2 [3] [2], или a2 [6] [1]. Как только вы скажете ему второе измерение, он сможет вычислить первое.
Например, попытка доступа к элементу a2 [1] [0] даст разные значения в зависимости от объявления. Вы можете получить 2, 3, 4 или даже неверную позицию.
Это не «второе измерение» (кроме случаев, когда у вас только 2 измерения) - это «все, кроме первого измерения». Так, например, у вас может быть int a [] [2] [3] [4]
. Без этих размеров невозможно вычислить адрес элемента.
Сядьте и выясните, как найти позицию в памяти a [i] [j]
с учетом начальной позиции массива.
Обратите внимание, что c-массивы устроены следующим образом a [0] [0]
a [0] [1]
a [0] [2]
... ] a [0] [M]
a [1] [0]
...
Примечание: Массивы FORTRAN устроены иначе: a [1] [1]
a [2] [1]
a [3] [1]
... a [N] [1]
a [1] [2]
». ..
Обратите внимание, как это изменит , какое измерение необходимо для поиска позиций в памяти.