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

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

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

Пример обращения к полям структуры

/* у операции "точка" приоритет выше, чем у операции *, поэтому используем скобки */

printf("%s %f",(*topStudent).FIO, (*topStudent).avg_rating);

31

Объединение

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

Переменная-объединение может хранить разнотипные значения — в каждый момент времени хранится значение только одного поля

Размер объединения определяется размером его

наибольшего поля

32

Различие структур и объединений

структура

 

объединение

 

struct my_struct

 

union my_union

 

{

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

char field1[6];

 

char field1[6];

 

int field2;

 

int field2;

 

};

 

 

 

 

 

 

 

 

};

 

 

 

 

 

 

 

 

struct my_struct

 

union my_union

 

field1

 

 

 

 

 

 

 

 

 

field1,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

field2

 

 

 

 

 

 

 

 

 

field2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

33

Свойства объединений

Объединения объявляются таким же образом, как и

структуры, но с использованием ключевого слова union

При инициализации объединения в фигурных скобках указывается значение ее первого поля

К объединениям применяются те же операции, что и к структурам

Объединение не хранит информацию о том, какому полю было присвоено значение

34

Свойства объединений

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

В общем случае результат такой операции предсказать невозможно — он зависит от способа хранения значений того или иного типа

35

Задание

Указать, что будет напечатано на экране

union my_union

{

char field1[6]; int field2;

} instance;

instance.field2 = 33333; puts( instance.field1 );

36

Обращение к полям объединения

instance.field2 = 33333;

instance field1 3582 0 0

puts( instance.field1 ); 5B

'5' — символ с кодом 35, 'B' — символ с ко- 37 дом 82

Использование объединений

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

Идентификационное поле определяет, какому полю объединения присвоено значение

Объединение при этом, как правило, является ано-

нимным

38

Задание

Объявить структуру s_grade для хранения оценки студента либо в числовой, либо строковой форме

Структура должна содержать следующие поля:

идентификационное поле — type: 0 — оценка в числовом формате, 1 — оценка в строковом формате

оценка — grade объединение из строкового и

39

числового полей

 

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

// Оценка в числовом и строковом форматах struct s_grade

{

int type;

// 0 - число, 1 - строка

union

 

 

{

 

 

char str_grade[21];

// в виде строки

int int_grade;

// в виде числа

} grade;

 

 

};

40