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 f
ein Zeiger auf eine Funktion ist, die einen void
Rückgabetyp hat und einen einzelnen int
Parameter akzeptiert. Die folgende Funktion ( print
) ist ein Beispiel für eine Funktion, die func
als 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 func
und die Druckfunktion an ihn übergeben.
Funktionskörper
Wie bei jedem Parameter func
kann jetzt der Name des Parameters im Funktionskörper verwendet werden, um auf den Wert des Parameters zuzugreifen. Angenommen, dies func
wendet 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 func
die Parameterdeklaration besagt, dass dies f
der Name für einen Zeiger auf die gewünschte Funktion ist, erinnern wir uns zunächst daran, dass, wenn f
es sich um einen Zeiger *f
handelt, auf was gezeigt wird f
(dh print
in 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
.