ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Указатели на функции.В языке Си идентификатор функции является константным указателем на начало функции в оперативной памяти и не может быть значением переменной. Но имеется возможность декларировать указатели на функ- ции, с которыми можно обращаться как с переменными (например, можно создать массив, элементами которого будут указатели на функции). Рассмотрим методику работы с указателями на функции. 1. Как и любой объект языка Си, указатель на функции необходимо декларировать. Формат объявления указателя на функции следующий: тип (* переменная-указатель ) (список параметров); т.е. декларируется указатель, который можно устанавливать на функции, возвращающие результат указанного типа и имеют указанный список параметров. Наличие первых круглых скобок обязательно, так как без них – это декларация функции, которая возвращает указатель на результат своей работы указанного типа и имеет указанный список параметров. Например, объявление вида float (* p_f) (char, float); говорит о том, что декларируется указатель p_f, который можно устанавливать на функции, возвращающие вещественный результат и имеющие два параметра: первый – символьного типа, а второй – вещественного типа. 2. Идентификатор функции является константным указателем, поэтому для того чтобы установить переменную-указатель на конкретную функцию, достаточно ей присвоить идентификатор этой функции: переменная-указатель = ID _функции; Например, имеется функция с прототипом float f1 (char, float); тогда операция p_f = f1; установит указатель p_f на данную функцию. 3. Вызов функции после установки на нее указателя выглядит так: (*переменная-указатель) (список аргументов); или переменная-указатель (список аргументов); После таких действий кроме стандартного обращения к функции ID _функции(список аргументов); появляется еще два способа вызова функции: (*переменная-указатель)(список аргументов); или переменная-указатель (список аргументов); Последнее справедливо, так как p_f также является адресом начала функции в оперативной памяти. Для нашего примера к функции f1 можно обратиться следующими способами: f1(‘z’, 1.5); // Обращение к функции по ID (* p_f)(‘z’, 1.5); // Обращение к функции по указателю p_f(‘z’, 1.5); // Обращение к функции по ID указателя 4. Пусть имеется вторая функция с прототипом: float f2 (char, float); тогда, переустановив указатель p_f на эту функцию: p_f = f2; имеем опять три способа ее вызова: f2(‘z’, 1.5); // по ID функции (* p_f)(‘z’, 1.5); // по указателю на функцию p_f(‘z’, 1.5); // по ID указателя на функцию Основное назначение указателей на функции – это обеспечение возможности передачи идентификаторов функций в качестве параметров в функцию, которая реализует некоторый вычислительный процесс, исполь- зуя формальное имя вызываемой функции. Не нашли, что искали? Воспользуйтесь поиском:
|