The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Вызов ф-ии через указатель"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Вызов ф-ии через указатель"  
Сообщение от iva email(ok) on 15-Ноя-07, 15:35 
Доброго дня. Подскажите, я имею указатель на функцию, например void *ptr, которая описана, как void fn(int i). Как вызвать эту ф-ию и передать ей параметры?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Вызов ф-ии через указатель"  
Сообщение от jd (??) on 15-Ноя-07, 15:50 
>Доброго дня. Подскажите, я имею указатель на функцию, например void *ptr, которая
>описана, как void fn(int i). Как вызвать эту ф-ию и передать
>ей параметры?

Если очень коротко, то примерно так:

void (*fp)(int) = ptr;
fp(33);

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Вызов ф-ии через указатель"  
Сообщение от iva email(ok) on 15-Ноя-07, 16:02 

void (*fp)(int) = ptr;
>fp(33);

это приводит  к ошибке "forbids implicit conversion from 'void *'"
Попробовала сделать с.о:
typedef void (*FUNC)(int)
.
.
.
FUNC fp = (FUNC)ptr;
fp(33);

В результате функция выполняется, но параметр не передается. Подскажите где ошибка.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Вызов ф-ии через указатель"  
Сообщение от iva email(ok) on 15-Ноя-07, 16:06 
в Виндах было бы
typedef void* (CALLBACK* FUNC) (int);
где CALLBACK  это модификатор pascal far. Это значение определяет как должны передаваться параметры
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Вызов ф-ии через указатель"  
Сообщение от Michelnok (ok) on 15-Ноя-07, 17:37 
> Подскажите где ошибка.

Приведите весь код.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Вызов ф-ии через указатель"  
Сообщение от iva email(ok) on 15-Ноя-07, 17:44 
>
>Приведите весь код.

Спасибо, все работает, но приведение типов все-таки делать надо

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Вызов ф-ии через указатель"  
Сообщение от angra (ok) on 15-Ноя-07, 16:10 
Рабочий пример
#include "stdio.h"
void f1(int a){
  printf("f1 %d\n",++a);
}
int main(){
  void (*ptr)(int a);
  ptr=&f1;
  (*ptr)(3);
}
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Вызов ф-ии через указатель"  
Сообщение от iva email(ok) on 15-Ноя-07, 16:21 
>Рабочий пример
>#include "stdio.h"
>void f1(int a){
>  printf("f1 %d\n",++a);
>}
>int main(){
>  void (*ptr)(int a);
>  ptr=&f1;
>  (*ptr)(3);
>}

в моем случае этот пример не работает. См. выше.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Вызов ф-ии через указатель"  
Сообщение от jd (??) on 15-Ноя-07, 19:46 
> в моем случае этот пример не работает. См. выше.

Вероятно, вы компилируете данный код, как C++, в то время как это - C. В C++ действительно более строго с приведением типов.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру