Declarație
Un prototip pentru o funcție care are un parametru de funcție arată după cum urmează:
void func ( void (*f)(int) );
Aceasta indică faptul că parametrul f
va fi un indicator al unei funcții care are un tip de returnare void
și care are un singur parametru int
. Următoarea funcție ( print
) este un exemplu de funcție care poate fi trecută ca parametru func
, deoarece este tipul potrivit:
void print ( int x ) {
printf("%d\n", x);
}
Funcție de apel
Când se apelează o funcție cu un parametru de funcție, valoarea trecută trebuie să fie un indicator al unei funcții. Utilizați numele funcției (fără paranteze) pentru aceasta:
func(print);
ar apela func
, trecând funcția de imprimare la ea.
Funcția corpului
Ca și în cazul oricărui parametru, func poate utiliza acum numele parametrului în corpul funcției pentru a accesa valoarea parametrului. Să presupunem că func va aplica funcția pe care o transmite numerele 0-4. Luați în considerare, în primul rând, ceea ce ar arăta buclă de a apela imprimare direct:
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
print(ctr);
}
Deoarece declarația parametrului func
spune că f
este numele unui indicator pentru funcția dorită, reamintim mai întâi că dacă f
este un pointer atunci * f
este un lucru pe care f
indică (de exemplu, funcția print
în acest caz). Prin urmare, înlocuiți fiecare apariție a tipăririi în buclă de mai sus cu * f
:
void func ( void (*f)(int) ) {
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
(*f)(ctr);
}
}
From http://math.hws.edu/bridgeman/courses/331/f05/handouts/c-c++-notes.html