- •1 Понятие алгоритма формы представления алгоритмов
- •2 Линейные и разветвляющиеся алгоритмы.
- •3 Циклические алгоритмы
- •4 Понятие прикладного и системного программирования
- •5 Структура программ на языке си
- •6 Арифметико-логические операции над переменными
- •Арифметические операции
- •Операции увеличения и уменьшения
- •Операции "увеличить на", "домножить на" и т.П.
- •Логические операции
- •Операции сравнения
- •Побитовые логические операции
- •7 Два вида оператора выбора Оператор if
- •8 Понятие цикла
- •1.4.6. Оператор break
- •1.4.7. Оператор for
- •1.4.8. Оператор while
- •1.4.9. Оператор do while
- •1.4.10. Оператор continue
- •1.4.11. Оператор return
- •9 Массив
- •12 Указатели
- •13 Адресная арифметика
- •14 Операции над указателями
- •15 Массивы указателей
- •16 Указатели на функции Указатели на функции
- •17 Структуры
- •18 Доступ к элементам структуры
- •19 Структуры как аргументы
- •6.2. Структуры и функции
- •20 Динамические структуры на массиве
- •21 Динамическое распределение памяти Функции динамического распределения
- •Динамическое выделение памяти для массивов
- •23 Организация доступа к файлам
- •Закрытие потока при помощи fclose
- •Чтение из потока при помощи fgetc
- •«Ловушка» eof
- •При помощи fgets
- •24 Форматированный ввод –вывод Функции форматированного ввода и вывода в си
- •Спецификатор типа
- •Спецификатор типа
- •25 Верификация тестирование отладка программ
- •Введение
- •26 Причины и последствия появления ошибок
- •27 Идея модульного программирования
- •28 Технология проектирования сверху-вниз
- •29 Итерация рекурсия
- •30 Методы сортировки
- •34 Способы защиты информации
16 Указатели на функции Указатели на функции
Указатели на функции задаются следующим образом:
1 2 3 |
void f() { } void (*pf)() = &f; pf(); |
В этом коде f - некоторая функция. Во второй строчке определяется переменная pf, которая является указателем на функцию, которая ничего не возвращает и не принимает ни одного аргумента. В определении pf ей присваивается адрес функции f. В третьей строке мы вызываем функцию по указатели pf(в данном случае будет вызвана функция f).
Рассмотрим еще несколько примеров: Пример 2.
1 2 |
void swap(int & a, int & b) { } void (*pswap)(int &, int &) = &swap; |
Пример 3.
1 2 3 4 5 6 7 8 |
void f(int a) { } void g(int b) { }
void (*pf)(int) = &f; pf(10); // Вызывается f(10)
pf = &g; pf(20); // Вызывается g(20) |
Примечание: во время присваивания указателю на функцию адреса функции амперсанд(&) можно опустить. В этом случае будет выполнено автоматическое привидение имени функции к адресу этой функции.
Пример 4.
1 2 3 4 5 |
void f() { } void g() { }
void (*pf) = &f; // Верно, &f - указатель на функцию f pf = g; // Тоже верно, имя функции(g) автоматически приводится к указателю на функцию. |
17 Структуры
Cтруктура - это составной объект, в который входят элементы любых
типов, за исключением функций. В отличие от массива, который является од-
нородным объектом, структура может быть неоднородной.
Синтаксис определения структурного типа данных:
struct имя_типа
{
спецификатор_типа имя_элемента;
спецификатор_типа имя_элемента;
. . .
};
Служебное слово struct указывает начало определения структуры. За ним
следует имя_типа, которое присваивается данному структурному типу; оно
array:
ptr: 17
называется идентификатором структуры. Затем в фигурных скобках указывает-
ся список отдельных элементов, образующих структуру. Элементы структуры
могут иметь любой тип, включая массивы, другие структуры.
Над структурами определены следующие операции: доступ к элементам
структуры через «.» и через указатель на нее « ». Доступ к элементам струк-
туры организован по имени элемента, а не по номеру как в массиве.
Пример c использованием типа данных struct Student, описывающего инфор-
мацию о студенте.
struct Student
{
char name[20]; /* Фамилия */
unsigned int id; /* Номер зачетной книжки */
unsigned int age; /* Возраст */
};
struct Student group[30]; /* Определение массива структур типа
struct Student */
struct Student starosta={“Иванов”, 990345, 20}; /* Инициализация
переменной типа struct Student */
group[0]=starosta; /* Присваивание нулевому элементу массива
переменной типа struct Student */