11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
|
|
1 | |
Расскаэите о указателях на функции18.09.2013, 15:02. Показов 1402. Ответов 20
Метки нет (Все метки)
Всем дорого времени суток.
Объясните нубу для чего необходимы указатели на функции и как и где их правильно применять... Что-то до меня не доходит из книг.
0
|
18.09.2013, 15:02 | |
Ответы с готовыми решениями:
20
Об указателях Ошибка в указателях немного об указателях Запутался в указателях |
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
|
|
18.09.2013, 15:08 | 2 |
для того, чтобы функцию передавать в качестве параметра другой функции, например, чтобы по таймеру выполнилась какая то твоя функция - ты передаешь ее в таймер, который написан совершенно другим человеком, и он не знает какая фукция должна выполниться после окончания таймера, а ты , в свою очередь без понятия - где и куда вставлять свою функцию в его коде, в таком случае делают функции, которые принимают в качестве параметра заведомо неизвестные функции
0
|
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
|
|
18.09.2013, 15:10 [ТС] | 3 |
почему нельзя вызвать функцию сразу после завершения функции таймер следующей строкой кода?
0
|
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
|
|
18.09.2013, 15:11 | 4 |
если таймер например не ты писал и просто не знаешь куда вставлять, либо это вообще библиотека, в которой код даже не поменять будет, как например Windows для окна использует оконную процедуру, полностью заданную пользователем, которая передается в класс окна в качестве указателя
0
|
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
|
||||||
18.09.2013, 15:15 [ТС] | 5 | |||||
Не по теме: простите если туплю
Указатель на функцию требуется что бы вызвать свою функцию посреди чужой функции?
0
|
Неэпический
|
||||||
18.09.2013, 15:22 | 6 | |||||
Небольшой пример:
0
|
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
|
|
18.09.2013, 15:25 | 7 |
ну вобщем да, когда тело передаваемой функции либо не известно самой функции, либо когда тело может меняться (например функция вызова заклинания на игрока - она сама по себе не знает что это за заклинание, но инициирует его на нужного игрока, а там уже какое заклинание пользователь выбрал такой и эффект будет - либо полечит , либо подамажит)
1
|
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
|
|
18.09.2013, 15:28 [ТС] | 8 |
Croessmah, К сожаления для понимания этого примера у меня мало знаний я не знаю ни шаблонов, ни классов пока, так что Ваш пример мне не ясен...
Raali, спасибо, картинка начинает проясняться, дальше думаю сам дожую
0
|
Неэпический
|
||||||
18.09.2013, 15:40 | 9 | |||||
Вот почти тоже самое без шаблонов
0
|
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
|
||||||||||||||||
18.09.2013, 16:29 | 10 | |||||||||||||||
Допустим, есть функция F(), которая принимает 3 аргумента.
два числа типа double и указатель на другую функцию:
Но у тебя нет исходника этой функции и ее невозможно изменить. И тут нам нужно использовать ее в своей программе, передав третьим аргументом свою собственную функцию Z()
1
|
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
|
|
18.09.2013, 16:47 [ТС] | 11 |
_, Я так понимаю пример из учебника Праты?
спасибо за развернутый ответ. Я уже понял где и как это может понадобиться. еще только одно уточнение - разве вопрос применения разных функций в разное время не решается перегрузкой функции? Или вызовом непосредственно по имени функции в коде?
0
|
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
|
|
18.09.2013, 16:57 | 12 |
я его когда то читал, наверно из него. точно не помню ) в памяти остался
да же не знаю что ответить. мне кажется это разные вещи. перегрузка это одно а передача указателя функции совсем другое. не знаю
0
|
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
|
|
18.09.2013, 17:17 [ТС] | 13 |
_, но ведь результат и цель одна и та же, или я не так понимаю?
0
|
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
|
|
18.09.2013, 17:22 | 14 |
0
|
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
|
||||||
18.09.2013, 17:26 | 15 | |||||
нет, это все таки разные вещи. указатель это указатель, а перегрузка функций это уже другое.
сам по себе указатель это переменная в 4 байта, и ей можно присваивать разные значения. перегрузка функций это когда есть несколько функций с одинаковыми именами, но у них разные аргументы вот еще небольшой пример с указателями. (на всякий случай)
1
|
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
|
|
18.09.2013, 17:38 [ТС] | 16 |
Raali,
в том что бы вызывать в зависимости от ситуации разные функции, нет?
_, не ясно почему нельзя вызвать функцию явно, зачем усложнять указателями?
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
18.09.2013, 17:51 | 18 |
и в этом тоже
например есть функции сортировки, она берет указатель на массив и указатель на функцию сравнения (больше меньше) в массиве могут лежать не простые данные(int char) а например твоя структура тогда пишешь свою функцию сравнения и подсовываешь функции сортировки итого одна и та же функция может сортировать разные данные второе применение, есть функция которая лежит в DLL подгружая DLL ты можешь взять адрес нужной тебе функции и использовать её по указателю.
1
|
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
|
||||||
18.09.2013, 17:51 | 19 | |||||
xD
вот например нам надо чтобы по кнопке ESC мы выходили из программы, к сожалению это не виндоус и мы не можем отследить нажатие клавиши сами, за то у нас есть одна функция в библиотеке по работе с клавиатурой вида - SetKeyboardListener(kbfunc f); - Она сама (мы не знаем, и не сможем узнать когда) вызовет пользовательскую(нашу) функцию обработки клавиш, тогда когда она посчитает нужным(в момент нажатия клавиши например)
1
|
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
|
|
18.09.2013, 18:05 [ТС] | 20 |
Спасибо всем, за подробные ответы, видимо так туго идет понимание из-за отсутствия опыта.
0
|
18.09.2013, 18:05 | |
18.09.2013, 18:05 | |
Помогаю со студенческими работами здесь
20
Стек на указателях не компилируется Написать стек на указателях Об указателях по философски-математически Реализация стека на указателях Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |