Инструкции

Справочный раздел

В этом разделе Вы найдетё инструкции, справочники, и всевозможные хелпы по использованию программного обеспечения.

Разделы инструкций

В сети

Пользователей: 134
Из них просматривают:
Аналоги: 42. Даташиты: 31. Инструкции: 4. Новости: 1. Обзор: 1. Остальное: 1. Программы: 1. Производители: 2. Форум: 51.
Участников: 2
Гостей: 132

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
Оглавление

Косвенное обращение к функции

Рассмотренные способы обращения к функции являются примерами непосредственного ее вызова, точно так же, как ранее непосредственно использовались значения переменных. Но при помощи указателя можно было получить доступ к содержимому переменной и косвенным образом, аналогичный способ существует и для обращения к функции.

 
Очевидно, реализация этого способа требует определения указателя на функцию. Делается это достаточно просто, путем объявления переменной соответствующего типа:

 

int (*funcptr)(int, int);

 

Этот пример объявляет переменную funcptr типа указатель на функцию, возвращающую результат типа int и имеющую 2 параметра типа int. При объявлении указателя на функцию запись выглядит слегка шиворот-навыворот, но так уж требует Си: сначала мы указываем тип результата функции, затем обязательно в круглых скобках идентификатор (не забудьте про звездочку - признак указателя), а затем, опять в круглых скобках, список типов параметров функции.

 
Сделанная запись - не что иное, как объявление переменной с новым типом. Можно определить этот тип при помощи typedef, после чего определять указатели на функции станет легче:

 

typedef int (*t_func)(int, int);

t_func funcptr;

 
Этот пример полностью аналогичен предыдущему.
Обращение к функции по указателю происходит чуть иначе, чем обращение к переменной по указателю: в данном случае операция разыменования указателя не используется:

 

funcptr = (t_func)0x1000;

funcptr(3, 12); // вызов функции с параметрами по абсолютному адресу

 
В этом примере можно было бы использовать и такое присваивание значения указателю:

 
funcptr = (void *)0x1000;

 

так как тип указателя (void *) совместим с любым иным типом указателя.

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.

Разное

Интересно

Если у вас нет жидкого канифольного флюса, его легко изготовить самостоятельно.
В небольшом количестве спирта растворяют кусочки канифоли до образования темно-коричневой жидкости. Наносят такой флюс на место пайки кисточкой.