Typedef union data
{ char str[80]; int a; double x; } new_data; Определения новых переменных (например, student1, student2) объединений будут выглядеть таким образом: new_data student1, student2; Объединения не относятся ни к скалярным данным, ни к данным агрегирующих типов [3]. Они не могут сравниваться операциями «==» и «!=» по тем же самым причинам, что и структуры, поскольку элементы объединения необязательно хранятся в последовательных байтах памяти. Объединения часто используются для специального преобразования типов, поскольку к находящимся в них данным можно обращаться разными способами [4].
1.2. Перечислимые типы Перечислимый (enumerated type) тип служит для объявления символических имен, представляющих целочисленные константы [1]. Можно сказать, что это тип данных, заданных списком принадлежащих ему значений. Назначение перечислимых типов заключается в том, чтобы повысить удобочитаемость программы [1]. Синтаксис в этом случае аналогичен тому, который используется для описания структур. Примеры объявления перечислимого типа: enum spectrum {red, orange, yellow, green, blue, violet}; enum spectrum color; Первое объявление устанавливает spectrum как имя дескриптора, который позволяет использовать enum spectrum в качестве имени типа. Второе объявление делает color переменной этого типа. Идентификаторы, заключенные в фигурные скобки, перечисляют возможные значения, которые может принимать переменная spectrum. Соответственно, возможными значениями color являются red, orange, yellow и т. д. Но эти возможные значения являются целочисленными, т. е. 0, 1, 2, 3, 4, 5. Другими словами, значения в enum начинаются с 0, если не задано иное число, и всегда увеличиваются на 1. В общем случае перечислимые константы имеют тип int, но перечислимые переменные не так жестко привязаны к целочисленному типу данных, поскольку он может содержать перечислимые константы. Например, перечислимые константы переменной spectrum имеют диапазон [0; 5] (как в массиве), поэтому компилятор может выбрать тип unsigned char для представления переменной color. В языке программирования С к перечислимой переменной можно применять операции инкрементирования «++» и декрементирования «––». Например, for (color = red; color <= violet; ++color) { ¼; } По умолчанию константам в перечислимом списке присваиваются целые значения 0, 1, 2 и т. д. В то же время возможны присваиваемые значения, например: enum levels {low = 100, medium = 500, high = 2000}; Если назначить конкретное значение одной из констант, то все следующие константы будут пронумерованы последовательно в возрастающем порядке, например: enum feline {cat, lynx = 10, puma, tiger}; В этом случае cat (кошка) получает значение 0 по умолчанию, lynx (рысь), puma (пума), tiger (тигр) – соответственно 10, 11, 12. Перечисления особенно полезны там, где не требуется преобразования значений (целого типа) в имена (массив символов), в частности используются в компиляторах для создания таблицы соответствия символов [4].
|