Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Type Definitions


Автор: Solodov 27.3.2006, 12:13
Народ, помогите понять данную запись:

typedef void (*PR_CALLBACK) (void);


Автор: _hunter 27.3.2006, 12:37
объявление типа "указатель на функцию"

Автор: Solodov 27.3.2006, 13:15
а зачем вообще нужны указатели на функцию?
...это, как бы в сегмент команд программы влазим? smile

Автор: _hunter 27.3.2006, 13:36
что такое сегмент команд я не знаю, но нужны они, например, для импрта функций из dll

Автор: Solodov 27.3.2006, 14:22
если мы знаем адрес памяти где лежит прога, то что это нам дает?

Автор: _hunter 27.3.2006, 14:39
не прога а функция. а дает нам это возможность вызвать оную

Автор: Solodov 27.3.2006, 14:43
а можно пример, как это происходит?

Автор: _hunter 27.3.2006, 15:06
http://forum.vingrad.ru/index.php?showtopic=55138

Автор: LPBOY 27.3.2006, 16:15
Цитата(Solodov @ 27.3.2006, 14:22 Найти цитируемый пост)
если мы знаем адрес памяти где лежит прога, то что это нам дает?

Цитата(Solodov @ 27.3.2006, 14:43 Найти цитируемый пост)
а можно пример, как это происходит?


Указатель на функцию - это просто адрес точки входа в эту функцию.
Вот пример:
Код

#include <iostream>

typedef int (*PF)(char); // PF - тип указатель на функцию принимающую в качестве аргумента char
                                      //и возвращающую int

int func1(char c)
{
    std::cout << c << '\n';
         return 0;
}

void func2(float f)
{
    std::cout << f << '\n';
}

int main()
{
    PF pf = &func1; //запоминаем адрес функции
    PF pf2 = func1; //можно и без знака &
    int (*pf3)(char) = func1; // можно и без typedef'a
//    PF pf4 = func2; - ошибка, у func2 другая сигнатура
    
    (*pf)('A'); //вызываем функцию func1 косвенно по указателю
    pf2('B');    //можно и без разыменования
    pf3('C');
    return 0;
}

Автор: Solodov 27.3.2006, 18:10
Всем спасибо!!!!!!

разобрался...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)