Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PYaVU_s.doc
Скачиваний:
44
Добавлен:
24.02.2016
Размер:
665.09 Кб
Скачать
      1. Строковые инициализаторы

Массив может быть инициализирован строчным литералом.

Например,

char code[ ] = "abc";

инициализирует code как массив символов из четырех элементов. Четвертым элементом является символ \0, который завершает все строковые литералы.

    1. Объявления типов

Объявление типа определяет имя и элементы структурного или совмещающего типов или имя и перечислимое множество перечислимого типа.

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

Объявление typedef определяет спецификатор типа для типа. Это объявление используется для того, чтобы создавать более короткие или более осмысленные имена типов уже определенных в Си или объявленных пользователем.

      1. Типы структур, совмещений и перечислений

Объявления типов структур, совмещений и перечислений имеют ту же самую общую синтаксическую форму, как и объявления переменных этих типов. В объявлении типа идентификатор переменной опущен, так как нет переменной которая объявляется. Именем структуры, совмещения или перечисления является тег.

В объявлении типа может появиться список объявлений элементов- <member-declaration-list> или список перечисления-<enum-list>, определяющие тип.

Сокращенная форма объявления переменной, в котором tag ссылается на тип, определенный где-то еще, при объявлении типа не используется.

Примеры:

/******************** Example 1 ********************/

enum status {

loss = -1,

bye,

tie = 0,

win,

};

/********************* Example 2 *******************/

struct student {

char name[20];

int id, claas;

};

В первом примере объявляется тип перечисления, поименованный status. Имя типа может быть использовано в об'явлениях переменных типа перечисления. Идентификатор loss явно устанавливается в -1. Идентификаторы bye и tie ассоциируются со значением 0, а win принимает значение 1. Во втором примере объявляется структурный тип, поименованный student. Теперь можно использовать такое объявление, как struct student employee, чтобы объявить структурную переменную employee типа student.

      1. Объявления typedef

Синтаксис:

typedef <type-speсifier><declarator>[,<declarator>...];

Объявления typedef являются аналогом объявления переменной, за исключением того, что ключевое слово typedef заменяет спецификатор класса памяти.

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

Примеры:

/******************** Example 1 ********************/

typedef int WHOLE;

/******************** Example 2 ********************/

typedef struct club {

char name[30];

int sise, year;

} GROUP;

/******************** Example 3 ********************/

typedef GROUP *PG;

/******************** Example 4 ********************/

typedef void DRAWE(int, int);

В первом примере объявляется WHOLE как синоним для int .

Во втором примере объ является GROUP как структурный тип с тремя элементами. Так как специфицирован также тег clab, то имя GROUP и тег club могу быть использованы в объявлениях.

В третьем примере используется предидущее имя typedef для объявления адресного типа. Тип PG объявляется как указатель на тип GROUP, который в свою очередь определен как структурный тип.

В последнем примере представлен тип DRAWE для функции не возвращающей значения и требующей два аргумента типа int. Это означает, например, что объявление DRAWE box; эквивалентно объявлению void box(int, int);