Инициализация числовых и символьных массивов.
Инициализация - это задание начальных значений объектов программы при их определении, проводится на этапе компиляции. Инициализация одномерных массивов возможна двумя способами: либо с указанием размера массива в квадратных скобках, либо без явного указания: int test [ 4] = { 10, 20, 30,40 }; char ch [ ] = { ‘a’, ‘b’, ‘c’, ‘d’ }; Список инициализации помещается в фигурные скобки при определении массива. В первом случае инициализация могла быть не полной, если бы в фигурных скобках находилось меньше значений, чем четыре. Во втором случае инициализация должна быть полной, и количество элементов массива компилятор определяет по числу значений в списке инициализации. Рассмотрим инициализацию многомерных числовых массивов. Массив любой мерности в С++ рассматривается как одномерный. Например, массив: int B [3] [2] [4] – трактуется какодномерный массив из трех элементов - двумерных массивов (матриц) int [2] [4], с именами B[0], B[1], B[2], каждый из этих массивов трактуется как одномерный массив, состоящий из двух одномерных массивов (векторов) int [4]. Располагаются элементы массива в ОП естественно одномерно: сначала располагаются все элементы первой матрицы, как было описано выше, затем второй и третьей. При определении, например, трехмерного массива инициализация его элементов может проводиться либо с учетом внутренней структуры массива, отделяя двумерные и одномерные массивы фигурными скобками, либо списком значений в соответствии с расположением элементов в оперативной памяти: int B [ 3 ] [ 2 ] [ 4] = { { {1, 2, 3, 4}, {5, 6, 7, 8} }, { {9, 10, 11, 12}, {13, 14, 15, 16} }, { {17, 18, 19, 20}, {21, 22, 23, 24} } }; эквивалентно: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, 23, 24 }; Для инициализации символьных массивов чаще всего используются строки. Инициация символьного массива может быть выполнена значением строковой константы, например, следующим образом: сhar stroka [10] = ''строка''; При такой инициализации компилятор запишет в память символы строковой константы и добавит в конце двоичный ноль '\0’, при этом памяти будет выделено с запасом (10 байт). Можно объявлять символьный массив без указания его длины: char stroka1 [ ] = ''строка''; Компилятор, выделяя память для массива, определит его длину, которая в данном случае будет равна 7 байтов (6 байтов под собственно строку и один байт под завершающий нуль). Инициализация двумерных символьных массивов проводится следующим образом: сhar name [5] [18] = {''Иванов'', ''Петров'', ''Розенбаум'', ''Цой'', ''Григорьев''}; При объявлении символьного массива будет выделено памяти по 18 байтов на каждую строку, в которые будут записаны символы строки и в конце каждой строки добавлен байтовый ноль, всего 90 байтов. При таком объявлении в массиве остается много пустого места. При определении многомерных массивов с инициализаций (в том числе и двумерных) значение первого индекса в квадратных скобках можно опускать. Количество элементов массива по первому измерению компилятор определит из списка инициализации. Например, при определении: char sh [ ] [40] = {''===================================='', ''| F | F | F | F | F |'', ''====================================''}; компилятор определит три строки массива по 40 элементов каждая, причем sh[0], sh[1], sh[2] – адреса этих строк массива в оперативной памяти. В каждую из строк будет записана строковая константа из списка инициализации.
|