Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2013, 16:39   #1
ElegantLady
 
Аватар для ElegantLady
 
Регистрация: 31.05.2013
Сообщений: 7
Восклицание Нужен теоретический материал!

Нужна теория по теме "использование функции как параметра другой функции"(Си).Помогите пожалуйста

Последний раз редактировалось ElegantLady; 24.06.2013 в 17:17.
ElegantLady вне форума Ответить с цитированием
Старый 24.06.2013, 16:41   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

тырк
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 24.06.2013, 16:42   #3
ElegantLady
 
Аватар для ElegantLady
 
Регистрация: 31.05.2013
Сообщений: 7
По умолчанию

Нужен не Паскаль..нужен Си.
ElegantLady вне форума Ответить с цитированием
Старый 24.06.2013, 17:11   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

А что там за материал? - объявляешь функцию, в качестве типа аргумента ставишь указатель на другую функцию.
Вызываешь функцию, передаешь в качестве аргумента указатель на функцию.
Все как всегда, вроде бы.

Если не Си а С++, то там есть std::functional, функциональные объекты и лямбда-функции, но у вас ведь Си?
rrrFer вне форума Ответить с цитированием
Старый 24.06.2013, 17:19   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

вот пример к вышесказанному:
Код:
#include <iostream>

int f_if() { return 1; }
int f_ig() { return 2;}

float f_ff() { return 1.1f; }
float f_fg() { return 2.2f; }

void f(int (*fptr)()) {
  std::cout << "void f(int (*fptr)()) : " << fptr() << std::endl;
}

void f(float (*fptr)()) {
  std::cout << "void f(float (*fptr)()) : " << fptr() << std::endl;
}

int main() {
  f(f_if);
  f(f_ig);
  f(f_ff);
  f(f_fg);
}
Соответственно, вывод:
Цитата:
void f(int (*fptr)()) : 1
void f(int (*fptr)()) : 2
void f(float (*fptr)()) : 1.1
void f(float (*fptr)()) : 2.2
-----------небольшие пояснения
f_if, f_gf - просто функции, без параметров, возвращают int (указатели на эти функции мы будем куда-то передавать)
f_ff, f_gf - тоже самое, но возвращают float

void f(int (*fptr)()), void f(float (*fptr)()) - 2 перегруженные функции, первая вызывается если передаем в f указатель на функцию, возвращающую int, -вторая- если float.

Код:
  f(f_if);
  f(f_ig);
  f(f_ff);
  f(f_fg);
тут вызываем нашу функцию f и передаем ей последовательно 4 указателя, в зависимости от типа указателя выбирается реализация f и что-то там выводит на экран (посмотришь сам{а})

Последний раз редактировалось rrrFer; 24.06.2013 в 17:30.
rrrFer вне форума Ответить с цитированием
Старый 24.06.2013, 17:40   #6
ElegantLady
 
Аватар для ElegantLady
 
Регистрация: 31.05.2013
Сообщений: 7
По умолчанию

большое спасибо
ElegantLady вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenSpace 3D материал Ghost3 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 21.05.2011 08:14
теоретический материал halerik Свободное общение 1 05.05.2011 16:23
Учебный материал. dixonich Общие вопросы C/C++ 3 24.02.2011 16:56
Теоретический Вопрос о поиске diliana Помощь студентам 16 13.06.2009 03:19
Материал о процедурах Jondeer Помощь студентам 18 04.12.2007 21:22