Инструкции

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

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

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

В сети

Пользователей: 97
Из них просматривают:
Аналоги: 30. Видео: 1. Галерея: 1. Даташиты: 17. Инструкции: 9. Новости: 10. Остальное: 6. Программы: 2. Производители: 4. Профиль пользователя: 5. Форум: 12.
Участников: 1
Гостей: 96

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

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

Разное

Интересно

Это интересно. Если надо паять нихромовую проволоку - не соединений, работающих в невысоких температурах - можно легко облудить и пропаять соединение в обычной лимонной кислоте.