Объединения
Объединения — это средство, позволяющее запоминать данные различ-ных типов в одном и том же месте памяти. Объединение позволяет создавать массив, состоящий из элементов одинакового размера, каждый из которых может содержать различные типы данных.
Определяется также как и структуры. Есть шаблон определения и переменные этого типа.
union simbl { int digit;
double bigfl;
char letter;
};
union simbl fit, save[10], *pu.
Компилятор выделяет память по наибольшему из элементов объедине-ния bigfl (double 8 байт), для массива структур save[10] будет выделено 10 Х 8 байт.
Как обращаться к элементу объеденения?
fit.digit=23; (использ. 2байта)
fit.bigfl=2.0 (23 стирается и записывается 2.0)
fit.letter=’a’ (2.0 стирается и записывается’a’в 1байт)
pu=&fit; x=pu->digit;
Все типы объединения начинаются с одного и того же адреса и в данный момент можно обратиться только к одному данному объединения.
Синоним имени типа
Встречаются ситуации, когда удобно ввести синоним для имени неко-торого типа.
Строится синоним имени с помощью ключевого слова typedef.
typedef int INT //INT-синоним типа int
INT x, y;
typedef unsigned size_t;
size_t x, y; //переменная типа unsigned
typedef char string[225];
string array; //char array[225];
1. Функция typedef даёт имена типам данных.
2. Выполняется компилятором.
3. Более гибка чем #define.
Хочу тип real вместо float
typedef float real;
real x, y[5], *px;
если определение расположено внутри функции, то область действия локальна, вне функции глобальна.
typedef char* STRING //STRING-идинтификатор указателя на тип char.
STRING name, sign; //char*name,*sign;
Определение именнованных констант
Существуют 3 вида именнованных констант:
— имя любого массива или функции;
— имена членов перечисления;
— любое имя любого типа, в определении которого присутствует модификатор const.
const i = 5;
const char *ip = &i;
Поскольку модификация такого объекта-константы запрещена, он должен быть инициализирован.
const int *ip; //константой является объект, на который указывает
//указатель;
int* const ip; //сам указатель является константой
const char *pc = «Это строка»;
pc[2] = ‘a’; //ошибка
pc = «Это другая строка»; //верно
char* const pc = «Это строка»;
pc[2] = ‘a’; //верно
pc = «Это другая строка»; //ошибка
Использование const предпочтительнее по сравнению с #define, так как использование константы контролирует компилятор.
Перечисления
Спецификатор enum позволяет программисту создавать собственные типы.
enum weekDays {Monday, Tuesday, Wensday, Thursday, Friday};
Идентификаторы перечисления представляют собой целочисленные переменные, которые по умолчанию имеют значения 0,1,…, если не указаны другие значения.
weekDays days;
Переменная days теперь может принимать одно из 5 значений.
days = Wensday;
enum colors {Red=2, Green=3};
enum VIDEO_BASE_ADDRES { VGA_EGA=0xA000000, CGA=0xB800000,
MONO=0xB000000};
