Когда вас интересуют более прогрессивные структуры данных, обратитесь к литературе по вычислительной технике. Используя структуры языка Си, вы сможете создавать типы, о которых вы прочитали.
Это наше последнее слово о структурах. Далее мы хотим вкратце ознакомить вас с двумя другими средствами языка Си для работы с данными: объединением и функцией typedef
.ОБЪЕДИНЕНИЯ - КРАТКИЙ ОБЗОР
Объединение - это средство, позволяющее запоминать данные различных типов в одном и том же месте памяти. Типичным использованием его было бы создание таблицы, содержащей смесь типов в некотором порядке, который не является постоянным и не известен заранее. Объединение позволяет создавать массив, состоящий из элементов одинакового размера, каждый из которых может содержать различные типы данных.
Объединения устанавливаются таким же способом, как и структуры. Есть шаблон объединения и переменные объединения. Они могут определяться одновременно или, если используется имя объединения, последовательно за два шага. Вот пример шаблона с именем объединения:
А вот пример определения переменных объединения типа holdem:
Первое описание создаст одну переменную fit
. Компилятор выделяет достаточно памяти для размещения самой большой из описанных переменных. В этом случае наибольшей из возможных является переменная double, для которой требуется в нашей системе 64 разряда или 8 байтов. Массив save имел бы 10 элементов, каждый по 8 байтов.Вот как используется объединение:
Вы применяете операцию получения элемента, чтобы показать, какие типы данных используются. В каждый момент времени запоминается только одно значение; нельзя записать char
и int одновременно, даже если для этого достаточно памяти.Вы сами должны следить за типом данных, записываемых в данный момент в объединение; приведенная ниже последовательность операторов показывает, что нельзя делать:
Ошибка заключается в том, что записано значение типа char
, a следующая строка предполагает, что содержимое fit имеет тип double.Можно использовать операцию - >
с объединениями таким же образом, как это делалось для структур:Рассмотрим теперь еще одно средство языка для работы с данными.
typedef - КРАТКИЙ ОБЗОР
Функция typedef
позволяет нам создать свое собственное имя типа. Это напоминает директиву #define, но со следующими тремя изменениями:1. В отличие от #define
функция typedef дает символические имена, но ограничивается только типами данных.2. Функция typedef
выполняется компилятором, а не препроцессором.3. В своих пределах функция typedef
более гибка, чем #define.Посмотрим, как она работает. Предположим, вы хотите использовать термин real
для чисел типа float. Тогда вы определяете термин real, как если бы он был переменной типа float, и перед его определением ставите ключевое слово typedef:С этого момента вы можете использовать real
для определения переменных:Область действия такого определения зависит от расположения оператора typedef
. Если определение находится внутри функции, то область действия локальна и ограничена этой функцией. Если определение расположено вне функции, то область действия глобальна.Часто в этих определениях используются прописные буквы, чтобы напомнить пользователю, что имя типа является на самом деле символической аббревиатурой:
В последнем примере можно было бы применить директиву #define
. А здесь это делать нельзя:Без ключевого слова typedef
оператор определял бы STRING как указатель на тип char. С ключевым словом оператор делает STRING