Адрес функции –это адрес памяти, с которого начинается машинный код функции.
Косвенное обращение по указателю на функцию – это вызов функции, адресуемой указателем.
Указатели на функции как параметры функции –это параметры функции, типы которых определены как указатели на функции.
Указатель на функцию– это переменная, которая содержит адрес этой функции.
1.Адресация функций осуществляется по первому байту расположения машинного кода функции в памяти.
2.Инициализированный указатель на функцию содержит адрес этой функции.
3.Арифметические операции над указателями на функции запрещены в силу их внутреннего представления.
4.При описании указателя на функцию необходимо соблюдать приоритет операций. Разыменование имеет низкий приоритет, поэтому порядок действий определяется круглыми скобками.
5.При описании указателя на функцию в качестве параметров можно указывать пустой список или список типов параметров.
6.При вызове функции через указатель необходимо, чтобы типы и набор фактических параметров совпадали с прототипом адресуемой функции.
7.Функции можно передавать в качестве параметров функций.
8.Указатели на функции и указатели как параметры функции имеют широкое практическое применение в программировании.
1. Почему запрещены арифметические операции над указателями на функции?
2. Почему в описании указателя на функцию необходимы круглые скобки при имени указателя?
3. Может ли функция возвращать значение типа указатель? Если да, то как объявляется прототип такой функции?
4. Могут ли параметрами функции быть указатели на объекты? Если да, то как происходит передача фактических параметров при вызове функции?
5. Могут ли параметрами функции быть указатели на функции? Если да, то как происходит передача фактических параметров при вызове функции?
6. Как понимается следующее объявление:
float *(*func)(int(*pf)(char),float);?
7. В чем отличие результатов вызова функции через указатель с последующим разыменованием указателя и без разыменования указателя?
1.Наберите коды программ из Примеров 1-3. Выполните компиляцию и запуск программ.
2.Методом половинного деления решите уравнения на отрезке [a, b] с данной точностью е: , . При решении считать, что на данном отрезке существует единственный корень. Решите первое уравнение на отрезке [0, 1], а второе на отрезке [100, 150].
3.Решите задачу, используя один указатель на функцию. Разработайте четыре функции над двумя целыми параметрами, соответствующие арифметическим операциям (+, -, *, /). В основной программе задавайте два целых параметра и символьный знак операции до тех пор, пока не будет введен пробел в качестве знака операции. В выходных данных выводите значения функций.
4.Вычислите суммы с данной точностью е. Используйте указатели на функции как параметры. и .