Лекции по проге / 14_Типы данных, определяемые пользователем
.pdf
Задание
● Объявить переменную 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
