Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основная книга по С++й.doc
Скачиваний:
16
Добавлен:
28.10.2018
Размер:
2.07 Mб
Скачать

Инициализация данных

При объявлении переменной ей можно присвоить начальное значение, присоединяя инициатор к описателю. Инициатор начинается со знака "=" и имеет следующие формы.

Формат 1 = <инициатор>;

Формат 2 = { <список инициаторов> };

Формат 1 используется при инициализации переменных основных типов и указателей, а формат 2 - при инициализации составных объектов.

Пример 24. Инициализация переменных.

char tol = 'N'; //Переменная tol инициализируется символом 'N'.

const long megabute = (1024 * 1024); /*Немодифицируемая переменная megabute

инициализируется константным

выражением, после чего она не может

быть изменена.*/

static int b[2][2] = {1,2,3,4}; /*Инициализируется двухмерный массив b целых

величин, элементам массива присваиваются

значения из списка.*/

static int b[2][2] = {{1,2},{3,4}}; /*Предыдущая инициализация может

быть выполнена следующим образом.*/

static int b[3[] = {{1,2},{3,4}}; /*При инициализации массива можно

опустить одну или несколько

размерностей.*/

static int b[2][2] = {{1,2},{3}}; /*Если при инициализации указано

меньше значений для строк, то

ставшиеся элементы инициализируются 0,

т.е. элементы первой строки получат

значения 1 и 2, а второй 3 и 0.*/

При инициализации составных объектов, нужно внимательно следить за использованием скобок и списков инициализаторов.

Пример 25. Инициализируется массив структур comp из двух строк и трех столбцов, где каждая структура состоит из двух элементов real и imag.

struct complex

{

double real;

double imag;

} comp [2][3] = {{{1,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}};

struct complex comp2 [2][3] = {{1,1},{2,3},{4,5}, {6,7},{8,9},{10,11}};

В этом примере компилятор интерпретирует рассматриваемые фигурные скобки следующим образом:

  • первая левая фигурная скобка  начало составного инициатора для массива comp2;

  • вторая левая фигурная скобка - начало инициализации первой строки массива comp2[0]. Значения 1,1 присваиваются двум элементам первой структуры;

  • первая правая скобка (после 1) указывает компилятору, что список инициаторов для строки массива окончен, и элементы оставшихся структур в строке comp[0] автоматически инициализируются нулем;

  • аналогично список {2,3} инициализирует первую структуру в строке comp[1], а оставшиеся структуры массива обращаются в нули;

  • на следующий список инициализаторов {4,5} компилятор будет сообщать о возможной ошибке так как строка 3 в массиве comp2 отсутствует.

При инициализации объединения задается значение первого элемента объединения в соответствии с его типом.

Пример 26. Инициализируется переменная pers.name.

union tab

{

unsigned char name[10];

int tab1;

} pers = {'A','H','T','O','H'};

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

Инициализацию массива символов можно выполнить путем использования строкового литерала.

char stroka[] = "привет";

Инициализируется массив символов из 7 элементов, последним элементом (седьмым) будет символ '\0', которым завершаются все строковые литералы.

В том случае, если задается размер массива, а строковый литерал длиннее, чем размер массива, то лишние символы отбрасываются.

Следующее объявление инициализирует переменную stroka как массив, состоящий из семи элементов.

char stroka[5] = "привет";

В переменную stroka попадают первые пять элементов литерала, а символы 'Т' и '\0' отбрасываются.

Если строка короче, чем размер массива, то оставшиеся элементы массива заполняются нулями.