Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по программированию и алгоритмизаци...doc
Скачиваний:
31
Добавлен:
05.09.2019
Размер:
2.24 Mб
Скачать

4.5.5. Перечисления

Это множество поименованных целых констант, называемых перечислимыми константами. Перечислительный тип определяет все допустимые значения, которые могут иметь переменные этого типа. Основная форма объявления

enum имя типа список названий список переменных;

Список переменных может быть пустым.

Пример: enum test{test1, test2, test3,test4};

enum test t;

Каждое из имен test1… test4 представляет собой целую величину (если они не определены по-другому). По умолчанию они соответствуют 0,1,2,3.

Во время объявления типа можно одному или нескольким перечисленным константам присвоить другие значения (константными выражениями).

Пример: еnum Ages {stas=18, ira, alex=19,Nina= alex-1};

Когда нет явного инициализатора, то применяется правило по умалчиванию: каждая следующая перечислимая константа увеличивается на единицу (+1) по сравнению с предшествующей. В примере вычисляется ira=19; Nina=18;

С переменными перечислимого типа можно проводить следующие операции:

– присвоить переменную типа enum другой переменной того же типа;

– провести сравнение с целью выяснения равенства или неравенства;

– некоторые арифметические операции с константами типа enum.

Пример: i= test4-test2;

Оператор print f(%d %d”, test1, test4); выдаст на экран числа 0 и 3.

t= test3;

t++ ;  теперь t= test4;

t -=2 ; // t = test2;

С перечислениями можно работать как с целыми типами. Перечисления неявно могут преобразовываться в обычные целочисленные типы, но не наоборот.

Пример использования перечислений.

#include <stdio.h>

void main()

{

enum test {t1,t2,t3,t4,t5} t;

printf("t1=%d t4=%d\n", t1,t4); // 0 3

t=t1; printf("t=t1 = %d\n ", t); // 0

t++; printf("t++ = %d\n ", t); // 1

t=t4; t-=2;

printf("t4=%d t-=2 = %d\n ", t4, t); // 3 1

t--; printf("t-- = %d\n ", t); // 0

t=t4; t=t-t2; printf("t= = %d\n ", t); // 2

}

Нельзя использовать другие арифметические операции. Перечислимые константы могут быть объявлены анонимно (без имени).

Пример.

enum{false, true} boolean; //объявляет переменную boolean с допустимыми

// значениями false, true.

Основное назначение перечислений улучшить читаемость программы.

4.5.6. Переименование типов

Язык Си позволяет дать новое название уже существующим типам данных. Для этого используется ключевое слово typedef и при этом новый тип не создается.

Typedef  имя ранее определенного типа  имя нового типа1

,имя нового типа2;

Новое имя становится синонимом имен ранее определенным. Пример:

typedef float real; //Теперь вместо float можно использовать real.

typedef char symbol; // вместо зарезервированного типа char можно

// использовать symbol

Часто используется для переопределения структур.

typedef struct st

{

char name [30];

char group [4];

int god;

} STUDENT;

Для определения переменной далее можно использовать запись st AN; или STUDENT AN;

Область действия зависит от расположения оператора typedef. Если определение находится внутри функции, то область действия локальна и ограничена этой функцией. Если вне, то – глобальна. С typedef может быть объявлен любой тип, включая указатели, функции и массивы, структуры и объединения.

Пример.

typedef char arr [40]; // FIO- массив символов

arr FIO, *adres; // adres - указатель на массив символов

Это эквивалентно char FIO[40], *adres;

Пример.

typedef int* Pi; //объявлен новый тип Pi-указатель на целое.

typedef void (*pfn) ( ); //объявлен новый тип pfn-указатель на функцию,

// не возвращающую значения, с любым списком типов аргументов.

typedef void (*pfnI) (int); // объявление типа pfnI-указатель на функцию с

//одним аргументом типа int, не возвращающую значения

typedef void (*pptn[10]) (); //объявление типа pptn- массив из 10 указателей

// на функцию, не возвращающую значения, с любым списком аргументов.