Перечислимый тип (enumeration).
Этот тип – множество поименованных целых констант.
Перечислимый тип определяет все допустимые значения, которые могут иметь переменные этого типа.
Формат:
enum имя_типа {список_названий} список переменных;
Пример:
enum seasons {win,spr,sum,aut};
enum seasons s;
Каждое из имен win,spr,sum,aut представляет собой целую величину. По умолчанию они соответственно равны 0,1,2,3.
Оператор
printf(“%d\t%d”,win,aut);
выдаст числа 0 и 3.
Во время объявления типа можно одному или нескольким именам присвоить другие значения:
enum value {one=1,two,three,ten=10,thausand=1000,next};
Если распечатать
printf(“%d\t%d\t%d\t%d\t%d\t%d\n”,one,two,three,ten,thausand,next);
то на экране появятся числа 1 2 3 10 1000 1001, то есть каждый следующий символ увеличивается на 1 по сравнению с предыдущим, если нет другого присвоения.
С переменными перечислимого типа можно производить следующие операции:
1. Присваивать переменную типа enum другой переменной того же типа.
2. Провести сравнение с целью выяснения равенства или неравенства.
3. Арифметические операции с константами типа enum (i=win-aut);
|
|
Нельзя использовать арифметические операции и операции ++ и -- для переменных типа enum.
Основная причина использования перечислимого типа – это улучшение читаемости программ.
enum seasons {win,spr,sum,aut} s,s1;
printf("%d\t%d\t%d\t%d\t",win,spr,sum,aut);
s=win;
s1=aut;
int i=spr;
// sum=3; //ошибка
printf("\ns=%d\ts1=%d\ti=%d\n",s,s1,i);
Typedef
Переименование типов – typedef
Язык Си позволяет дать новое название уже существующим типам данных.
При этом не создается новый тип данных.
Пример:
typedef struct st {
char name [30];
char group[5];
}STUDENT;
Теперь можно использовать два варианта определения переменной структуры:
1. struct st var1;
2. STUDENT var1;