Почему только второе измерение массива важно?

Почему при работе с двумерными матрицами только второй размер важен для компилятора? Просто не может получить мою голову вокруг этого.Спасибо

7
задан Matt Ball 1 April 2010 в 17:00
поделиться

3 ответа

Потому что компилятору нужно выяснить, как получить доступ к данным из памяти. Первое измерение не важно, потому что компилятор может подсчитать количество элементов, когда указаны все остальные размеры.

Примеры:

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 или даже неверную позицию.

6
ответ дан 6 December 2019 в 23:04
поделиться

Это не «второе измерение» (кроме случаев, когда у вас только 2 измерения) - это «все, кроме первого измерения». Так, например, у вас может быть int a [] [2] [3] [4] . Без этих размеров невозможно вычислить адрес элемента.

4
ответ дан 6 December 2019 в 23:04
поделиться

Сядьте и выясните, как найти позицию в памяти 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] ». ..

Обратите внимание, как это изменит , какое измерение необходимо для поиска позиций в памяти.

1
ответ дан 6 December 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: