Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Type Definitions, как трактовать ниже описанное объявление 
V
    Опции темы
Solodov
Дата 27.3.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 23.3.2006

Репутация: нет
Всего: нет



Народ, помогите понять данную запись:

typedef void (*PR_CALLBACK) (void);


PM MAIL   Вверх
_hunter
Дата 27.3.2006, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



объявление типа "указатель на функцию"


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Solodov
Дата 27.3.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 23.3.2006

Репутация: нет
Всего: нет



а зачем вообще нужны указатели на функцию?
...это, как бы в сегмент команд программы влазим? smile
PM MAIL   Вверх
_hunter
Дата 27.3.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



что такое сегмент команд я не знаю, но нужны они, например, для импрта функций из dll


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Solodov
Дата 27.3.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 23.3.2006

Репутация: нет
Всего: нет



если мы знаем адрес памяти где лежит прога, то что это нам дает?
PM MAIL   Вверх
_hunter
Дата 27.3.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



не прога а функция. а дает нам это возможность вызвать оную


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Solodov
Дата 27.3.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 23.3.2006

Репутация: нет
Всего: нет



а можно пример, как это происходит?
PM MAIL   Вверх
_hunter
Дата 27.3.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98





--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
LPBOY
Дата 27.3.2006, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Цитата(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;
}

--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
Solodov
Дата 27.3.2006, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 23.3.2006

Репутация: нет
Всего: нет



Всем спасибо!!!!!!

разобрался...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.