Erklärung
Ein Prototyp für eine Funktion, die einen Funktionsparameter verwendet, sieht folgendermaßen aus:
void func ( void (*f)(int) );
Dies besagt, dass der Parameter fein Zeiger auf eine Funktion ist, die einen voidRückgabetyp hat und einen einzelnen intParameter akzeptiert. Die folgende Funktion ( print) ist ein Beispiel für eine Funktion, die funcals Parameter übergeben werden kann, da es sich um den richtigen Typ handelt:
void print ( int x ) {
printf("%d\n", x);
}
Funktionsaufruf
Beim Aufruf einer Funktion mit einem Funktionsparameter muss der übergebene Wert ein Zeiger auf eine Funktion sein. Verwenden Sie dazu den Namen der Funktion (ohne Klammern):
func(print);
würde aufrufen funcund die Druckfunktion an ihn übergeben.
Funktionskörper
Wie bei jedem Parameter funckann jetzt der Name des Parameters im Funktionskörper verwendet werden, um auf den Wert des Parameters zuzugreifen. Angenommen, dies funcwendet die Funktion an, die an die Zahlen 0-4 übergeben wird. Überlegen Sie zunächst, wie die Schleife aussehen würde, um print direkt aufzurufen:
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
print(ctr);
}
Da funcdie Parameterdeklaration besagt, dass dies fder Name für einen Zeiger auf die gewünschte Funktion ist, erinnern wir uns zunächst daran, dass, wenn fes sich um einen Zeiger *fhandelt, auf was gezeigt wird f(dh printin diesem Fall auf die Funktion ). Ersetzen Sie daher einfach jedes Auftreten von Druck in der obigen Schleife durch *f:
void func ( void (*f)(int) ) {
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
(*f)(ctr);
}
}
Quelle
typedef.