Многомерные массивы. Возможны по крайней мере три варианта реализации многомерных массивов.
Возможны по крайней мере три варианта реализации многомерных массивов.
1. Использование специальных типов данных. В этом случае размер по каждому измерению указывается в отдельных квадратных скобках. Обращение к элементам происходит аналогично одномерному массиву.
Пример:
int x[4][4][3];
x[0][0][0] = 5;
Массивы могут инициализироваться значениями в фигурных скобках, при этом допустимо не указывать последнюю (самую левую) размерность. Если заданная размерность меньше инициализирующих аргументов, часть элементов останется неопределенна. Обратная ситуация вызовет ошибку.
Примеры:
int x[3][2]={{1,2},{3,4},{5,6}}; //заданы и размеры массива, и инициализирующие значения
long y[] = {1,2,3,4}; // размер массива определяется фактическому по количеству // значений (4)
char t[][4] = {{1,2,3,4},{5,6}}; // последняя размерность определяется по числу значений (2) и // элементы t[1][2] и t[1][3] не определены
При таком указании данные располагаются в памяти последовательно, порядок расположения соответствует порядку указания при инициализации.
2. Использование многомерных указателей. В этом случае каждую размерность указателя требуется явно инициализировать. Таким способом можно получить, например, двумерный массив с различной длиной строк.
Пример:
int **x;
x = new int*[3];
for(int i=0;i<3;i++) x[i] = new int[i];
x[0][0] = 0; x[1][0] = 1; x[1][1] = 2; x[2][0] = 3; x[2][1]=4; x[2][2] = 5;
Получаем массив вида
В этом случае в памяти отдельно хранится массив указателей на строки и отдельно сами строки.
3. Хранение многомерного массива в одномерном.
Например, переход от двух индексов (i,j) можно осуществить по формуле i*m+j, где m – максимальная размерность по j (количество столбцов).
Дата добавления: 2015-08-26; просмотров: 831;