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

Указатель на функцию - C++

Восстановить пароль Регистрация
 
Eugine
 Аватар для Eugine
3 / 3 / 0
Регистрация: 10.11.2012
Сообщений: 63
24.12.2012, 17:23     Указатель на функцию #1
Всем доброго времени суток.

Вот обычный указатель на функцию. Код прекрасно работает. (Код на С)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
typedef int (*func)(int, int);
int g(int a, int b);
int main()
{
    func f = g;
    int c = f(4,4);
    printf("%d\n", c);
    return 0;
}
int g(int a, int b)
{
    return a * b;
}
Возник такой вопрос: можно ли сделать что-то похожее на такое?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
typedef int (*func)(int, int);
int g(int a, int b);
int main()
{
    func* f = &g;
    int c = (*f)(4,4);
    printf("%d\n", c);
    return 0;
}
int g(int a, int b)
{
    return a * b;
}
Код разумеется не рабочий) Вопрос в том можно ли как то достичь такого эффекта.
Вообще интересует динамическое выделение памяти под функцию, т.е. вот такой пример !нерабочего кода!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
typedef int (*func)(int, int);
int g(int a, int b);
int main()
{
    func* f = (func*)malloc(sizeof(g));
        f = &g;
    int c = (*f)(4,4);
    printf("%d\n", c);
    free(f);
    return 0;
}
int g(int a, int b)
{
    return a * b;
}
Можно ли добиться такого эффекта?
Я понимаю, это полнейший абсурд)) Но любопытство берет вверх)
Спасибо за ответы)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2012, 17:23     Указатель на функцию
Посмотрите здесь:

Как передать параметр типа "указатель на указатель" в функцию? C++
Указатель на указатель на функцию C++
Как передать указатель на функцию в функцию C++
Зачем передавать в функцию X указатель на callback функцию, если последняя ВНЕШНЯЯ и вызовется БЕЗО ВСЯКОГО УКАЗАТЕЛЯ? C++
Работа с файлом (передать указатель на файл в функцию, вернуть указатель на файл из функции) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.12.2012, 17:34     Указатель на функцию #2
f на плюсах у тебя - двойной указатель, ему можно присвоить только адрес указателя, но имя функции обозначает адрес, то есть значение указательного типа, а не сам указатель, значения адресов не имеют.

Добавлено через 2 минуты
Цитата Сообщение от Eugine Посмотреть сообщение
Вообще интересует динамическое выделение памяти под функцию,
Функция должна уже быть в программе на момент окончания компиляции, сама прога её не скомпилит. О каком же динамическом выделении может быть речь? Подо что? Функция то уже слинкована статически. Есть динамическое связывание, но это загрузка внешнего библиотечного файла, этим занимается система.
Eugine
 Аватар для Eugine
3 / 3 / 0
Регистрация: 10.11.2012
Сообщений: 63
24.12.2012, 18:09  [ТС]     Указатель на функцию #3
Спасибо за ответ)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.12.2012, 12:16     Указатель на функцию #4
Место для указателей на функции можно выделять динамически, но не для самих функций. Попробуй
C++
1
2
func* f = (func*)malloc(sizeof(func));
*f=g;
и
C++
1
2
func* f = new func;
*f=g;
.
Yandex
Объявления
25.12.2012, 12:16     Указатель на функцию
Ответ Создать тему
Опции темы

Текущее время: 00:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru