
Объявление пользовательских типов
В языке С имеется возможность определять свои типы данных и использовать их затем в программах. Новый тип может быть создан как на базе встроенного типа, так и определенного ранее. Так, известно, что для представления данных в вычислительной технике используется структура, состоящая из 8 двоичных разрядов – бит, которая называется байт. Количество значений, которые можно закодировать байтом невелико – 256. Для кодирования большего числа значений широко используются такие структуры как машинное слово и двойное машинное слово. Машинное слово состоит из 2 байт (16 бит) и позволяет задать 65536 (216) значений, а двойное машинное слово состоит из 4 байт (32 бита) и позволяет задать 4294967296 (232) значений. Эти типы данных являются беззнаковыми, т.е. машинное слово, например, задает диапазон значений 0..65535. Используя стандартные типы языка в программах можно работать с такими структурами. Так встроенный тип long имеет размер 4 байта и его можно описать как беззнаковый, применив модификатор unsigned. В примере выполнено описание переменной для хранения некоторого цвета и переменная инициализирована белым цветом.
unsigned long color = 0xFFFFFFFF;
Такое описание не всегда удобно, т.е. содержит много символов. В общем случае описание типа выглядит так
typedef исходный_тип новый_тип
В MS Visual C++ в файле windef.h описаны WORD и DWORD для описаний машинного слова и двойного машинного слова
typedef unsigned short WORD
typedef unsigned long DWORD
Подключив этот заголовочный файл переменную для обработки цвета можно описать так
DWORD color = 0xFFFFFFFF;
Структурированные типы
Решение вычислительных задач очень часто приводит к использованию наборов данных, имеющих достаточно сложную логическую организацию. Таковыми, например, являются всевозможные каталоги, статистические таблицы, информационные бюллетени и наборы данных, создаваемые компилятором при обработке программ на языках высокого уровня. В то же время, оперативная память ЭВМ организована крайне примитивно в логическом отношении, представляя собой последовательность занумерованных ячеек длинной в один байт каждая. Такое несоответствие логической сложности структур данных и возможностей их компьютерного представления вызывает значительные трудности при разработке программного обеспечения. Возможный путь решения возникающей проблемы состоит в создании языков программирования, поддерживающих такую логическую организацию данных, которая наиболее типична для широкого круга прикладных задач. К подобным языкам относится и язык С, обладающий чрезвычайно мощными средствами представления и обработки сложных агрегатов данных. Одним из способов реализации структурных логических конструкций является использование одно- и многомерных массивов переменных, которые определяются как упорядоченные последовательности элементов данных одного типа. С другой стороны массив можно рассматривать как единую логическую структуру, которая содержит ячеек одинакового типа. Однако статичность и однородность массивов в том виде, как они были определены, несколько ограничивает возможность их применения для описания внутренних логических связей реальных информационных систем. И, все таки, массивы можно рассматривать как структурированный тип данных. И переменная такого типа – это переменная, которая содержит несколько значений, т.е. некоторую информационную структуру.
Кроме того в языке С можно использовать более сложные агрегаты данных, называемые структурами, для которых требование однородности уже не имеет значения.