Инструкции

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

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

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

В сети

Пользователей: 214
Из них просматривают:
Аналоги: 119. Даташиты: 51. Инструкции: 9. Новости: 13. Остальное: 2. Профиль пользователя: 4. Форум: 16.
Участников: 1
Гостей: 213

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 *) совместим с любым иным типом указателя.

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

Разное

Интересно

Посыпав место пайки песком или натерев крошащимся камнем, можно паять обычными методами даже алюминий.