- •Структуры и другие типы данных.
- •Установка структурного шаблона.
- •Определение структурных переменных.
- •Создание простой структуры. ( тут не знаю как лучше)
- •Инициализация структуры.
- •Доступ к элементам структуры.
- •Передача структур в функции.
- •Создание массива структур.
- •Описание массива структур.
- •Определение элементов массива структур.
- •Вложенные структуры.
- •Использование указателей на структуры.
- •Описание и инициализация указателя на структуру.
- •Доступ к элементу структуры при помощи указателя.
- •Передача информации о структурах функциям. Использование элементов структуры.
- •Передача массива структур в функцию.
- •Дополнительные манипуляции со структурами.
- •Передача членов структуры в функцию.
- •Передача информации о структурах функциям. Использование элементов структуры.
- •Передача информации о структурах функциям. Использование адреса структуры.
- •Передача информации о структурах функциям. Использование массива.
- •Имя массива можно использовать для передачи в функцию указателя на первую структуру в массиве.
- •Затем можно использовать арифметическую операцию над указателем, чтобы передвигать его на последующие структуры в массиве. Заметим, что вызов функции
- •Структуры внутри структур.
- •Структуры и битовые поля.
- •Структуры. Их дальнейшее использование.
- •Объединения.
- •Шаблон объединения.
- •Объединения: синтаксис и правила.
- •Создание простого объединения.
- •Вспомогательные средства.
- •Использование typedef.
- •Сложные формы данных.
- •Использование enum.
Объединения.
Объединение — еще один тип данных, который можно использовать различными способами. К примеру, некоторое объединение может рассматриваться как целое значение при выполнении одной операции и как число с плавающей точкой или двойной точности — при выполнении другой. По виду объединения напоминают структуры; однако, они сильно отличаются. Объединение, так же как и структура, может содержать несколько различных типов данных. Однако в объединении эти данные занимают одну и ту же область памяти! Таким образом, в отдельный момент времени объединение может хранить информацию только об одном типе данных. Во многих других языках высокого уровня данное языковое средство называется "записью с вариантами" (variant record).
Шаблон объединения.
Объединение — это средство, позволяющее запоминать данные различных типов в одном и том же месте памяти. Типичным использованием его было бы создание таблицы, содержащей смесь типов в некотором порядке, который не является постоянным и не известен заранее. Объединение позволяет создавать массив, состоящий из элементов одинакового размера, каждый из которых может содержать различные типы данных.
Объединения устанавливаются таким же способом, как и структуры. Есть шаблон объединения и переменные объединения. Они могут определяться одновременно или, если используется имя объединения, последовательно, за два шага. Вот пример шаблона с именем объединения:
union holders {
int digit;
double bigfl;
char letter;
};
А вот пример определения переменных объединения типа holdem:
union holdem fit; /* переменная объединения типа holdem */
union holdem save[10]; /* массив из 10 переменных объединения */
union holdem *pu; /* указатель на переменную типа holdem */
Первое описание создает одну переменную fit. Компилятор выделяет достаточно памяти для размещения самой большой из описанных переменных. В этом случае наибольшей из возможных является переменная double, для которой требуется в нашей системе 64 разряда или 8 байтов. Массив save имел бы 10 элементов, каждый по 8 байтов.
Вот как используется объединение:
fit.digit = 23; /* 23 записывается в fit; используется 2 байта */
fit.double = 2.0; /* 23 стирается, 2.0 записывается; используется 8 байтов */
fit.letter = ' h' ; /* 2.0 стирается, h записывается; используется 1 байт */
Вы применяете операцию получения элемента, чтобы показать, какие типы данных используются. В каждый момент времени запоминается только одно значение; нельзя записать char и int одновременно, даже если для этого достаточно памяти.
Вы сами должны следить за типом данных, записываемых в данный момент в объединение; приведенная ниже последовательность операторов показывает, что нельзя делать:
fit.letter = 'A';
flnum = 3.02*fit.double; /* ОШИБКА ОШИБКА ОШИБКА V
Ошибка заключается в том, что записано значение типа char, a следующая строка предполагает, что содержимое fit имеет тип double.
Можно использовать операцию — > с объединениями таким же образом, как это делалось для структур:
pu = &fit;
х = pu—>digit; /* то же, что и х = fit.digit */