- •Функции.
- •Вызов функции с переменным числом параметров
- •Функция main и её параметры.
- •Директивы препроцессора (прекомпилера).
- •Объявление указателей.
- •Модификатор const.
- •Операции.
- •Указатели на различные типы.
- •Указатель на void.
- •Применение указателей для передачи данных между функциями.
- •Массивы.
- •Индексация массивов.
- •Хранение массива в памяти. Адреса элементов. Хранение массива в памяти.
- •Массивы и константные указатели.
- •Статическое и динамическое выделение памяти.
- •Функции calloc, malloc, free
- •Функция realloc
- •Передача массивов в качестве аргументов функции.
- •Указатели на функции.
- •Библиотеки функций.
- •Функции форматированного ввода-вывода.
- •Функция printf().
- •%[Флаги] [Ширина] [.Точность] [{h | l | I | i32 | i64}]тип
- •Для чего нужен форматированный вывод.
- •Функция scanf().
- •Функции sprintf() и sscanf().
- •Функции fprintf() и fscanf().
- •Функции неформатированного ввода-вывода.
- •Работа со строковыми данными (стрингами). Представление строковых данных в языке c.
- •Функции работы со строками.
- •Потоковый ввод-вывод
- •Функции форматированного ввода-вывода.
- •Функция printf().
- •%[Флаги] [Ширина] [.Точность] [{h | l | I | i32 | i64}]тип
- •Для чего нужен форматированный вывод.
- •Функция scanf().
- •Функции sprintf() и sscanf().
- •Функции fprintf() и fscanf().
- •Функции неформатированного ввода-вывода.
- •Функции работы с файлами.
- •Потоковый ввод-вывод
- •Работа с потоками
- •Курсор.
- •Ввод-вывод отдельных символов и строк.
- •Форматированный ввод-вывод информации в файл.
- •Блочный потоковый ввод-вывод
- •Смена текущей позиции в файле. Проверка конца файла.
- •Функции доступа к файлам нижнего уровня.
- •Методы сортировки данных.
- •Введение
- •Сравнение методов сортировки
- •Программная реализация алгоритмов сортировки
- •Метод пузырька.
- •Метод обмена.
- •Метод вставки.
- •Метод Шелла.
- •Метод кучи (бинарной кучи).
- •Очередь
- •Линейный список
- •Физическое (машинное) представление линейных списков
- •Программные реализации структур данных. Стек. Реализация в виде массива.
- •Стек. Связанное представление.
- •Очереди. Реализация в виде массива.
- •Дерево. Связанное представление.
- •Рекурсивный вызов функций.
- •Структуры. Объединения. Перечисления.
- •Перечисление (enum).
- •Производные типы данных.
- •Структура (struct).
- •Побитовое описание полей структуры.
- •Объявление переменных, реализующих структуру.
- •Доступ к элементам структуры.
- •Объединение (union).
- •Вложенное описание структур и объединений.
- •Описание структур и объединений в виде пользовательского типа.
- •Передача структур и объединений в виде параметров функции.
- •Инициализация структур и объединений.
- •Выгода от использования структур
Перечисление (enum).
Перечисление (enum) – является простым целочисленным типом, чей размер совпадает с размером типа int (т.е. для Win32 – 4 байта). Перечисление – это набор заранее заданных в следующей форме констант:
enum ИмяПеречисления
{
константа1,
константа2
}ИмяПеременной;
где ИмяПеречисления – некоторый идентификатор перечисления,
ИмяПеременной – имя создаваемой переменной.
Внутри фигурных скобок идёт список констант (элементов перечисления), разделённых запятой. Создаваемая переменная будет иметь тип ИмяПеречисления и сможет принимать только те значения, которые указаны в списке констант. ИмяПеременной может опускаться, в этом случае переменная создаваться не будет, а будет описано только само перечисление. Переменная с таким типом может быть создана позже, особым образом. ИмяПеречисления также может быть опущено – в этом случае повторное использование этого перечисления (например, для создания ещё одной переменной) становится невозможным.
Все константы в списке ассоциируются с каким-либо уникальным в пределах списка целочисленным значением. Некоторым (или всем) из констант может быть присвоено конкретное целочисленное значение в явном виде с помощью операции присваивания. Если же для какого-либо элемента его значение не задаётся, то оно принимается равным значению предыдущего элемента, увеличенному на 1. Если значение первого элемента перечисления не проинициализировано, то оно принимается равным нулю.
Примеры:
enum En1
{
item1=1, // 1
item2, // 2
item3 // 3
};
enum En2
{
item1, // 0
item2, // 1
item3=10, // 10
item4, // 11
item4=25 // 25
}EnumVar;
В первом примере создаётся только перечисление, во втором – перечисление и переменная.
Переменные с типом enum не обязательно создавать непосредственно в момент объявления перечисления. Это можно сделать и позже с помощью всё того же ключевого слова enum. Синтаксис определения переменной выглядит следующим образом:
enum ИмяПеречисления ИмяПеременной;
Например, для описания ещё одной переменной с типом перечисление En2, необходимо записать:
enum En2 MyVar;
Как видим, работа с типом данных "перечисление" несколько отличается от работы с простыми типами – всегда необходимо указывать префикс enum. Различия тем не менее, можно убрать с помощью применения директивы typedef (см. ниже).
Константы, указанные в любом из перечислений могут быть использованы при работе и с обычными целочисленными переменными – на этапе прекомпиляции вместо них будут подставлены соответствующие целочисленные значения. Например:
enum MyEnum
{
item1,
item2
};
main()
{
int i;
i=item1;
}
Некоторые компиляторы довольно чувствительно относятся к такому методу использования элементов перечисления и выдают предупреждение или даже ошибку о несоответствии типов.
Точно также в переменные, имеющие тип enum, можно записывать (и читать из неё) непосредственно целочисленную константу. В этом случае также возможны предупреждения со стороны компилятора, хотя в большинстве случаев он трактует любой тип enum как обычный тип int.