Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по проге / 14_Типы данных, определяемые пользователем

.pdf
Скачиваний:
32
Добавлен:
14.03.2016
Размер:
224.69 Кб
Скачать

Задание

Объявить переменную my_grade типа s_grade и инициализировать ее оценкой "пятерка"

Напечатать оценку, содержащуюся в переменной my_grade в зависимости от того, какое поле было заполнено

41

Пример использования объединения

// Задаем оценку

struct s_grade my_grade = {1, {"пятерка"} };

// Печатаем оценку

if(my_grade.type == 0) // числовой формат

{

printf("%d", my_grade.grade.int_grade);

}

else // строковый формат

{

printf("%s",my_grade.grade.str_grade);

}

42

Перечисление

Перечисление — это тип данных, который определяет множество именованных целочисленных констант

Переменная-перечисление может принимать одно значение из множества возможных

Числовые значения констант, входящих в перечисление, могут быть заданы как программистом, так и самим компилятором

Перечисление может содержать одинаковые чи-

43 словые константы, но с разным именем

Объявление перечисления

enum <имя перечисления>

{<имя константы 1> [= <целое число>],

...

<имя константы N> [= <целое число>] };

Если числовое значение не задано, то оно автоматически присваивается равным индексу значения в списке (начиная с нуля)

Сочетание enum <имя перечисления> становится типом данных, а имена констант (без скобок, кавы-

чек и т.д.) — значениями, которые может прини- 44 мать переменная-перечисление

Задание

Объявить перечисление week_days, содержащее дни недели (по английски), и специальное значение any с числовым значением -1

Объявить переменную-перечисление best_day и инициализировать ее значением sunday

45

Пример использования перечисления

enum week_days

{

sunday,

monday,

tuesday,

wednesday,

thursday,

friday,

saturday, any = -1

};

46 enum week_days best_day = sunday;

Это надо помнить!

После объявления структуры (объединения, перечисления) ее имя, с необязательным ключевым словом (struct, union, enum) перед ним, становится типом данных

Структура (объединение) может содержать любые ранее объявленные типы (в том числе и указатель на себя), но не может содержать саму себя

Возможно объявление одних структур внутри дру-

 

гих, такие вложенные структуры (объединения)

47

обычно являются анонимными

Это надо помнить!

При объявлении структуры (объединения, перечисления) возможно указание следующих имен:

после ключевого слова (struct, union, enum) перед открывающей фигурной скобкой ставится имя структуры (объединения) как типа данных,

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

При инициализации переменной-структуры в фи-

гурных скобках указываются значения всех полей, 48 объединения — только первого поля

Это надо помнить!

Перед операцией "точка" ("стрелка") возможно указание любого выражения, дающего в результате структуру или объединение (указатель на нее для операции ->) Примеры таких выражений: обращение к элементу массива, полю другой структуры или вызов функции

Если вы присвоили значение одному полю объединения, а считываете из другого, то результат

непредсказуем. Объединение не «помнит», какому полю делалось присвоение — контроль за этим

49 возлагается на программиста

Ошибки при компиляции для VS 2008 Russian

выражение слева от ".<имя поля>" должно представлять класс, структуру или объединение — вы пытаетесь обратиться к полю структуры используя операцию "точка", но выражение слева от нее не возвращает значение структуры или объединения (например это может быть указатель на структуру)

<имя поля>: не является членом "<имя поля>" - справа от операции "точка" или -> неправильно указано имя поля структуры или объединения (такого поля в структуре нет)

50