- •Функции.
- •Вызов функции с переменным числом параметров
- •Функция 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).
- •Вложенное описание структур и объединений.
- •Описание структур и объединений в виде пользовательского типа.
- •Передача структур и объединений в виде параметров функции.
- •Инициализация структур и объединений.
- •Выгода от использования структур
Библиотеки функций.
Библиотека функций – набор скомпилированных в машинный код реализаций функций, собранных в виде одного файла. Первоначально существовали только статические (.lib) библиотеки, присоединяемые к коду основной программы на этапе компоновки (сборки), и включаемые в файл с конечным оттранслированным кодом программы.
С появлением операционной среды Windows распространение получили также динамические (.dll) библиотеки, не включаемые в файл с конечным оттранслированным кодом программы. Функции из динамических библиотек вызываются с помощью операционной системы прямо во время исполнения программы. Такая технология позволяет использовать одну библиотеку сразу несколькими программами без увеличения их размера, а также позволяет операционной среде использовать ресурсы компьютера более эффективно. Технология динамического подключения участков кода разработана очень давно, однако в современном привычном виде динамические библиотеки появились вместе с ОС Windows.
В данном курсе мы будем рассматривать статические библиотеки. Большой разницы в использовании готовых статических и динамических библиотек нет (хотя есть некоторая разница в принципах вызова функций динамической библиотеки), но есть существенная разница в методике их создания.
Сразу отметим, что под библиотеками очень часто понимаются наборы функций, описанные в хэдер-файлах. С формальной точки зрения, это неправильно, т.к. библиотека – это набор откомпилированных реализаций (описаний) функций, хэдер-файл – это набор их объявлений. Путаница между библиотеками и хэдер-файлами возникла в те времена, когда в стандартных библиотеках функций компиляторов каждому библиотечному файлу (.lib) соответствовал свой хэдер-файл (.h). Однако большинство современных компиляторов не придерживаются этого принципа, поэтому для строгой формализации мы будем называть функции, описанные в стандартных хэдер-файлах, наборами функций.
Рассмотрим некоторые наиболее часто используемые функции.
Функции форматированного ввода-вывода.
Функции форматированного ввода-вывода объявлены в хэдере stdio.h.
Функция printf().
Функция printf осуществляет форматированный вывод информации на консоль (экран).
Синтаксис:
int printf (const char* FormatString, [arg1, arg2,]…);
arg1, arg2, и т.д. - это список аргументов, значения которых необходимо напечатать.
FormatString – форматирующая строка. Это строка символов, задающая формат печати аргументов.
Например:
printf("значение числа пи равно %f\n",pi);
Список аргументов содержит только один элемент pi.
printf("значение числа пи равно %f\n, число е=%f",pi,e);
Список аргументов содержит 2 параметра - pi и e.
Форматирующая строка содержит информацию двух различных видов:
Символы, печатаемые напрямую. В их число также входят спецсимволы (\n – перевод строки, \t – табуляция)
Спецификаторы форматирования, начинающиеся с знака % (%f)
Поскольку знак % зарезервирован для описания форматов, то для того, чтобы напечатать просто символ % необходимо пользоваться сочетанием %%.
Каждому аргументу из списка, следующего за форматирующей строкой, должен соответствовать один спецификатор форматирования.
Спецификатор форматирования имеет следующий синтаксис: