Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на программирование.doc
Скачиваний:
10
Добавлен:
17.04.2019
Размер:
393.22 Кб
Скачать

2.9. Инициализация

Переменной в объявлении может быть присвоено начальное значение посредством инициализатора. Можно инициализировать переменные любого типа. Функции не инициализируются. Записи инициализатора в объявлении предшествует знак равенства: =<инициализатор>

Базовые типы и указатели

Можно инициализировать переменные любого типа. Функции не инициализируются. Синтаксис: =<выражение>

Значение выражения присваивается переменной.

Составные типы

Элементы объектов составных типов инициализируются только константными выражениями. Инициализация объектов составных типов имеет следующий синтаксис:

= {<список инициализаторов>}

Список инициализаторов представляет собой последовательность инициализаторов, разделенных запятыми. Список инициализаторов заключается в фигурные скобки. Каждый инициализатор в списке представляет собой либо константное выражение, либо, в свою очередь, список инициализаторов. Таким образом, заключенный в фигурные скобки список может появиться внутри другого списка инициализаторов. Эта конструкция используется для инициализации тех элементов объектов составных типов, которые сами имеют составной тип. Значения константных выражений из каждого списка инициализаторов присваиваются элементам объекта составного типа в порядке их следования. Если в списке инициализаторов меньше элементов, чем в объекте составного типа, то оставшиеся элементы объекта неявно инициализируются нулевыми значениями. Если же число инициализаторов больше, чем требуется, то выдается сообщение об ошибке. Эти правила применяются и к каждому вложенному списку инициализаторов.

Строковые инициализаторы

Существует специальная форма инициализации массива типа char - спомощью символьной строки. Например, объявление char code[] = "abc";

инициализирует массив code четырьмя символами-'a', 'b', 'c' и символом '\0', который завершает символьную строку. Если в объявлении размер массива указан, а длина инициализирующей строки превышает указанный размер, то лишние символы отбрасываются. Если инициализирующая строка короче, чем специфицированный размер массива, то оставшиеся элементы массива инициализируются нулевым значением (символом '\0'). Символьной строкой можно инициализировать не только массив типа char, но и указатель на тип char.

2.10. Объявление типа (объявление тега, typedef, абстрактные имена типов).

Объявление тега

Объявление типа структуры, объединения или перечислимого типа имеет такую же синтаксическую форму, как и объявление переменной этих типов, однако в объявлении типа идентификатор переменной (а в общем случае описатель) опущен. Именем типа структуры, объединения или перечислимого типа является тег. Тег – идентификатор, именующий структуру, которая объявляется списком объявления элементов. Описание специфицирует либо переменную типа struct, либо массив, либо указатель на структуру данного типа, либо объект, являющийся комбинацией вышеперечисленного. Например:

struct [<тег>] {<список-объявлений-элементов>} <описатель> [,<описатель>:];

Объявления typedef

Синтаксис: typedef <спецификация типа> <описатель> [,<описатель>:];

Объявление typedef синтаксически аналогично объявлению переменной или функции, за исключением того, что вместо спецификации класса памяти записывается ключевое слово typedef и отсутствует инициализатор. Объявление typedef интерпретируется таким же образом, как объявление переменной или функции, однако идентификатор, входящий в состав описателя, специфицирует не переменную или функцию, а тип. Идентификатор становится синонимом для объявленного типа и может употребляться в последующих объявлениях. Другими словами, создаются не новые типы, а имена для специфицированных программистом типов. С помощью typedef может быть объявлено имя для любого типа, как базового, так и составного - указателя, функции, массива. Принято записывать идентификаторы типов, объявленные посредством typedef, прописными буквами, однако это не является требованием языка.

Абстрактные имена типов

Иногда возникает необходимость специфицировать некоторый тип данных без присвоения ему идентификатора и без объявления какого-либо объекта. Такая конструкция, определяющая тип без имени, называется абстрактным именем типа. Абстрактные имена типов используются в трех контекстах: в списках типов аргументов при объявлении функций, в операции приведения типа и в операции sizeof. Абстрактными именами для базовых, перечислимых, структурных типов и объединений являются просто соответствующие им спецификации типа. Абстрактные имена для типов указатель, массив и функция задаются следующей синтаксической конструкцией:

<спецификация типа> <абстрактный описатель>

Абстрактный описатель отличается от обычного описателя только тем, что он не содержит идентификатора. Как и обычный описатель, он может содержать один или более признаков указателя, массива и функции.

(int * - абстрактное имя для указателя на тип int, int (*) [5] – на массив из пяти элементов типа int, int (*) (void) – на функцию, не требующую аргументов и возвращающую значение типа int).