Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект Лекций «программирование На Языке Высокого Уровня Си» По Информатике (Попов Д. И.).pdf
Скачиваний:
157
Добавлен:
07.10.2014
Размер:
1.31 Mб
Скачать

Пример 23. Величины i,l,d будут явно преобразовываться к указанным в круглых скобках типам.

int i=2; long l=2; double d; float f;

d=(double)i * (double)l; f=(float)d;

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

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

Формат 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.

105

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'};

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

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

106