parametrem funkcji jest inna funkcja (czysty C)

parametrem funkcji jest inna funkcja (czysty C)
Blue_Carpet
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 3 lata
  • Postów:132
0

Witam,
Przed swietami na kolosku mialem zadanie, w ktorym byla wywolywana funkcja z dwoma parametrami i tym drugim parametrem byla inna funkcja ktora w ogole ja mialem stworzyc (ta funkcja o ile dobrze pamietam miala wypisywac rozne dane na ekranie). Czysty jezyk C.
Moje pytanie: W jaki sposob zabierac sie za takiego typu zadania?

edytowany 1x, ostatnio: Blue_Carpet
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

Nie rozumiem pytania. W C możesz używać wskaźników do funkcji i taki wskaźnik może być parametrem innej funkcji.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
MS
  • Rejestracja:około 10 lat
  • Ostatnio:2 miesiące
  • Postów:100
1

Google -> Function pointers in c

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
3

http://ideone.com/gz0kOM

Kopiuj
#include <stdio.h>

typedef void show_type(int y,int x); /* show_type - typ który opisuje funkcje o takim prototypie */

void showyx(int y,int x) { printf("(%d,%d)\n",y,x); } /* jedna funkcja o takim prototypie */
void showxy(int y,int x) { printf("(%d,%d)\n",x,y); } /* druga funkcja o takim prototypie */

void foo(show_type *fun /*, ... */ ) /* funkcja przyjmująca wskaźnik na taki prototyp */
  {
   /* ... */
   int x=2,y=3;
   fun(y,x);
   /* ... */
  }

int main()
  {
   foo(&showyx);
   foo(&showxy);
   return 0;
  }

Lub sensowny przykład: http://www.cplusplus.com/reference/cstdlib/qsort/


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 godzin
3

Albo

Kopiuj
typedef void (*show_type)(int y,int x);
 
void foo(show_type fun /*, ... */ )
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0

@Azarien, albo od razu:

Kopiuj
void foo(void (*fun)(int y,int x) /*, ... */ ) /* funkcja przyjmująca wskaźnik na taki prototyp */

po kiego się przyjmować czytelnością ;P

Komentarz od @Azarien skojarzył mi się z pewnym kawałem:
Angielska rodzina: mister Sem, missis Sem oraz miss Sem starsza i miss Sem młodsza odpuścili przysługę na weekendy i usiedli napić się herbaty.
Po zakończeniu picia herbaty zaczęła się kłótnia - kto będzie sprzątać ze stołu.
Wtedy mister Sem powiedział: - Kto pierwszy przemówi chociażby słowo, ten będzie sprzątać ze stołu. Usiadł w krzesło zapalił fajkę i zagłębił się w czytanie gazety.
Po jakimś czasie wpadł narzeczony młodszej córki, grzecznie się przekwitał ale jemu nikt nie odpowiedział.
Wtedy on wziął miss Sem młodszą odniósł do sypialni i zrobił to co zamierzał zrobić dopiero po ślubie, po czym przyniósł i posadził ją na miejsce. Jemu nikt nic nie powiedział.
Wtedy on wziął miss Sem starszą odniósł do sypialni i zrobił to co zamierzał zrobić miesiąc po ślubie, po czym przyniósł i posadził ją na miejsce. Jemu nikt nic nie powiedział.
Wtedy on wziął missis Sem odniósł do sypialni i zrobił to o czym nawet nie marzył, po czym przyniósł i posadził ją na miejsce. Jemu nikt nic nie powiedział.
Nagle przypomniał sobie dlaczego wpadł, w jego samochodzie zaczęli strasznie skrzypieć lusterka, więc on zapytał: - mister Sem u was przypadkiem nie znajdzie się trochę wazeliny?
Nie! - twardo odparł mister Sem i poszedł sprzątać ze stołu.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
_13th_Dragon
To prawie jak w kawale, dopiszę w poście wyżej.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.