Не пройдя через множество литературы на сайтах Sun и Microsoft, это то, что я помню со своих дней C. Надеюсь это поможет.
Для простоты, если мы просто думаем в двух измерениях - массивы могут быть представлены как двумерный массив и массив указателей. В коде это составляет
int x [15] [20];
int * y [15];
В этом примере x [5] [6] и b [5] [6] являются допустимыми синтаксически и в итоге ссылаются на один int.
При этом x является истинным двумерным массивом: после того, как вы его создадите, будет отведено 300 мест (которые могут содержать int), и вы можете использовать хорошо известное условное обозначение для доступа к этому прямоугольный (с 15 строками и 20 столбцами) массив, в котором вы можете получить x [row, col] путем вычисления (20 * row) + col.
Однако в случае y, пока структура определяется, только 15 указателей выделяются, но не инициализируются. (Инициализация должна быть сделана явно)
У этого подхода есть свои преимущества и недостатки (массив указателей или «массив массивов» или неровный массив, как он называется):
Преимущество:
Строки этого массива могут иметь различную длину, т. Е. Каждый элемент y не должен указывать на строку из двадцати элементов; один элемент может указывать на 2 элемента, второй элемент может указывать на 3 элемента, а третий - на ноль элементов и т. д.
Неудобство:
Однако, учитывая наилучший сценарий, если каждый элемент y указывает на массив из двадцати элементов, тогда будет выделено 300 целочисленных местоположений плюс десять ячеек для указателей, что является дополнительным.
С точки зрения текущего примера, приведенных выше четких примеров C (в одном из предыдущих постов) должно быть достаточно.