Тема 5 Массивы
Массивы Массив - конечная именованная последовательность однотипных величин float A[10]; // описание массивы из 10 вещественных чисел !!! элементы массива нумеруются с нуля
Инициализация массивов int b[5] = {0, 1, 2}; // b[0] = 0, b[1] = 1, b[2] = 2, b[3] = 0, b[4] = 0 Значения элементам присваиваются по порядку. Если элементов в массиве больше, чем инициализаторов, элементы, для которых не указаны значения, обнуляются. Размерность массива вместе с типом определяют объем памяти, необходимой для размещения массива, которые выполняется на этапе компиляции. Поэтому размерность может быть задана только целой положительной константой или константным выражением. Если размерность не указана, должен присутствовать инициализатор => компилятор выделит память по количеству инициализированных значений.
Динамические массивы Нужны тогда, когда заранее не известна размерность массива. Динамические массивы создаются при помощи операции new. int n = 100; float * p = new float [n]; - создается переменная-указатель на float в динамической памяти отводится место для 100 элементов вещественного типа, и адрес ее (памяти) начала записывается в переменную p Динамические массивы нельзя инициализировать при создании и они не обнуляются. Альтернативный способ задания д. м. - с помощью фукнции malloc: int n = 100; float * q = (float *) malloc(n* sizeof(float));
Многомерные массивы Задаются указанием каждого измерения в квадратных скобках int matr [6][8]; - задает двумерный массив из 6 строк и 8 столбцов. В памяти такой массив располагается построчно. matr[i] - адрес начала i-й строки массива. Доступ к элементам массива - аналогично одномерным массивам, с указанием всех его индексов: matr[i][j] *(matr[i]+j) *(*(matr + i) + j) Инициализация многомерного массива: int mass[][2] = { {1, 1}, {0, 2}, {1, 0} }; int mass[3][2] = { 1, 1, 0, 2, 1, 0 };
Динамические многомерные массивы Указать все его размерности в операторе new. Самая левая размерность может быть переменной. int n. Str = 5; int ** m = (int **) new int [n. Str][10];
Динамические многомерные массивы Если размерности не известны, то: 1) Сначала создаем "массив начал массивов" 2) Затем создаем каждый "вложенный" массив int n. Str = 5; int n. Col = 10; int ** A = new int* [n. Str]; Int // объявляем указатель на // Выделяется память под массив for(int i = 0; i < n. Str; i++) { A[i] = new int [n. Col]; ю // указателей на строки массива // n. Str - количество строк массива // Цикл для обхода каждой строки // Выделяем новый участок памяти под i// строку, и записываем адрес в массив
Динамические многомерные массивы int ** A A int * A[n. Str] int A[n. Str][n. Col] A[0][1 ] A[0] A[1] . . . A[1][0 ] . . n. Str A[n. Str-1] . . . n. Col A [n. Str] [n. Col]
Динамические многомерные массивы Освобождение памяти из-под массива с любым количеством измерений происходит с помощью операции delete[ ] for(int i = 0; i < n. Str; i++) { delete [] A[i]; } delete [] A;