Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
#1

Расскаэите о указателях на функции - C++

18.09.2013, 15:02. Просмотров 682. Ответов 20
Метки нет (Все метки)

Всем дорого времени суток.
Объясните нубу для чего необходимы указатели на функции и как и где их правильно применять... Что-то до меня не доходит из книг.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2013, 15:02     Расскаэите о указателях на функции
Посмотрите здесь:

Об указателях - C++
В чем разница между этими двумя строчками? int* x; int *x;

немного об указателях - C++
есть код: #include <iostream> #include <windows.h> using namespace std; int main() { int inta=1234; int...

Ошибка в указателях - C++
Здравствуйте, не понимаю почему выводит мусор. Вроде бы все правильно сделал. Знаю что можно было сделать p = rand(); но меня это не...

Написать стек на указателях - C++
хочю знать как написать стёк на указателях мне нужно чтобы можно было добавлять новые елемнты сколько угодно а уберать не обязтельно ...

Совсем запутался в указателях - C++
Шестую строку не могу понять, по моему перед массивом var должен стоять &. const int MAX = 3; int _tmain(int argc, _TCHAR* argv) {...

Реализация очереди на указателях - C++
Очередь на указателях: #include <iostream> using std::cin; using std::cout; using std::endl; const int Number = 10; enum...

Об указателях по философски-математически - C++
Допустим, имеем код: int *p; Есть мнение, что истолковать запись можно двояко: 1) р - тип, указывающий на инт; 2) р -...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
18.09.2013, 17:38  [ТС]     Расскаэите о указателях на функции #16
Raali,
Цитата Сообщение от Raali Посмотреть сообщение
Сообщение от h_wolf
но ведь результат и цель одна и та же, или я не так понимаю?
в каком смысле?
в том что бы вызывать в зависимости от ситуации разные функции, нет?

_, не ясно почему нельзя вызвать функцию явно, зачем усложнять указателями?
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
18.09.2013, 17:49     Расскаэите о указателях на функции #17
Цитата Сообщение от h_wolf Посмотреть сообщение
зачем усложнять указателями?
Наоборот всё становится легче
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,733
18.09.2013, 17:51     Расскаэите о указателях на функции #18
Цитата Сообщение от h_wolf Посмотреть сообщение
в том что бы вызывать в зависимости от ситуации разные функции, нет?
и в этом тоже
например есть функции сортировки, она берет указатель на массив и указатель на функцию сравнения (больше меньше)
в массиве могут лежать не простые данные(int char) а например твоя структура
тогда пишешь свою функцию сравнения и подсовываешь функции сортировки
итого одна и та же функция может сортировать разные данные

второе применение, есть функция которая лежит в DLL подгружая DLL ты можешь взять адрес нужной тебе функции и использовать её по указателю.
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 1
18.09.2013, 17:51     Расскаэите о указателях на функции #19
Цитата Сообщение от h_wolf Посмотреть сообщение
не ясно почему нельзя вызвать функцию явно, зачем усложнять указателями?
xD

вот например нам надо чтобы по кнопке ESC мы выходили из программы, к сожалению это не виндоус и мы не можем отследить нажатие клавиши сами, за то у нас есть одна функция в библиотеке по работе с клавиатурой вида - SetKeyboardListener(kbfunc f); - Она сама (мы не знаем, и не сможем узнать когда) вызовет пользовательскую(нашу) функцию обработки клавиш, тогда когда она посчитает нужным(в момент нажатия клавиши например)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void listener(int param)
{
if(param == ESC)
{
exit(1);
}
}
 
int main(int, char**)
{
SetKeyboardListener(listener);
 
while(1) ;
 
return 1;
}
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
18.09.2013, 18:05  [ТС]     Расскаэите о указателях на функции #20
Спасибо всем, за подробные ответы, видимо так туго идет понимание из-за отсутствия опыта.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2013, 18:32     Расскаэите о указателях на функции
Еще ссылки по теме:

Реализация стека на указателях - C++
Стек на указателях: #include <iostream> using std::cin; using std::cout; using std::endl; enum FirstNodeEnum{NoFirstNode,...

Стек на указателях не компилируется - C++
#include <iostream> using std:: cin; using std:: cout; using std:: endl; struct NodePtr { char Value; NodePtr* Next; ...

передать в функцию стек на указателях - C++
Всем привет. Есть стек, реализованный через указатели. Необходимо его отправить в две функции не по значению. Проблема в том,...

Обьясните простым языком об указателях * и & - C++
Всё что в книгах прочитал, но толком не могу понять зачем нужны * и &. Обьясните кто может, простым языком...

Вопрос об указателях. - Visual C++
Здравствуйте уважаемые форумчане. Собственно меня интересует такой вопрос: Можно ли заставить компилятор C++: инициализировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6443 / 3082 / 306
Регистрация: 04.12.2011
Сообщений: 8,488
Записей в блоге: 4
18.09.2013, 18:32     Расскаэите о указателях на функции #21
h_wolf, по смыслу указатель на функцию похож на любой указатель. Он позволяет адресовать сущность косвенно, то есть без имени. Тип указателя должен быть определён и указатель инициализирован. Для указателя на функцию тип определяется сигнатурой объявления.
Косвенное обращение, позволяет устанавливать точку ветвления, не заботясь о имени функции которая будет передана в эту точку через указатель. Важно только чтобы сигнатура подходила.
Перегрузка тут вообще не подойдёт для сравнения. Там имя совпадает, а типы параметров нет. При перегрузке сохраняется, как правило алгоритм. Просто он становится не чувствителен к типам параметров при вызове. Если и количество параметров при перегрузке варьируется, то это тем более не тот случай. Такая перегрузка как перегрузка конструкторов или операторов, не для ветвления вообще, а для обеспечения гибкости использования.
Ближе к теме, какой-нибудь блок - функция с заданной сигнатурой, в которой в ветвях оператора switch, например вызываются функции с этой же сигнатурой ( и этими же параметрами). Но в этом случае, все имена вызываемых в том или ином случае функций должны быть известны, на момент написания кода. То есть как библиотека для стороннего клиента это не подойдёт.
Техника обратного вызова, в принципе тоже использует указатели на функции. То есть если функция присоединяется к функции, без кода которой её выполнение невозможно, то в присоединяющую функцию передается указатель клиентской функции и её аргументы, а та запускает клиентский код.
Yandex
Объявления
18.09.2013, 18:32     Расскаэите о указателях на функции
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru