0Pricing
C Academy · Lektion

Funktionen übergeben

Callbacks als Argumente

Funktionen übergeben ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.

Funktionen als Argumente

Da ein Funktionszeiger einfach ein Wert ist, können Sie eine Funktion an eine andere Funktion übergeben. Die empfangene Funktion wird Callback genannt.

So kann eine Routine einen Teil ihres Verhaltens anpassen.

#include <stdio.h>

int apply(int x, int (*f)(int)) {
    return f(x);
}

int square(int x) { return x * x; }

int main(void) {
    printf("%d\n", apply(6, square));
    return 0;
}

Der Callback-Parameter

Der Callback-Parameter wird genauso deklariert wie eine Variable vom Typ Funktionszeiger. Innerhalb der Funktion rufen Sie ihn wie jede andere Funktion auf.

#include <stdio.h>

void run_twice(void (*action)(void)) {
    action();
    action();
}

void beep(void) { printf("beep\n"); }

int main(void) {
    run_twice(beep);
    return 0;
}

Verhalten austauschen

Übergeben Sie verschiedene Callbacks, um mit derselben Funktion höherer Ordnung unterschiedliche Ergebnisse zu erzielen.

#include <stdio.h>

int combine(int a, int b, int (*op)(int, int)) {
    return op(a, b);
}

int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }

int main(void) {
    printf("%d\n", combine(3, 4, add));
    printf("%d\n", combine(3, 4, mul));
    return 0;
}

Auf ein Array abbilden

Eine map-Funktion wendet einen Callback direkt auf jedes Element eines Arrays an.

#include <stdio.h>

void map(int *a, int n, int (*f)(int)) {
    for (int i = 0; i < n; i++) a[i] = f(a[i]);
}

int inc(int x) { return x + 1; }

int main(void) {
    int a[] = {1, 2, 3};
    map(a, 3, inc);
    for (int i = 0; i < 3; i++) printf("%d ", a[i]);
    printf("\n");
    return 0;
}

Filtern mit einem Prädikat

Ein Prädikat ist ein Callback, der true oder false zurückgibt. Verwenden Sie ihn, um passende Elemente zu zählen oder auszuwählen.

#include <stdio.h>

int count_if(int *a, int n, int (*pred)(int)) {
    int c = 0;
    for (int i = 0; i < n; i++) if (pred(a[i])) c++;
    return c;
}

int is_even(int x) { return x % 2 == 0; }

int main(void) {
    int a[] = {1,2,3,4,5,6};
    printf("%d\n", count_if(a, 6, is_even));
    return 0;
}

Auf einen Wert reduzieren

Eine reduce-Funktion fasst ein Array mithilfe eines binären Callbacks und eines Startakkumulators zu einem einzelnen Wert zusammen.

#include <stdio.h>

int reduce(int *a, int n, int init, int (*op)(int,int)) {
    int acc = init;
    for (int i = 0; i < n; i++) acc = op(acc, a[i]);
    return acc;
}

int add(int a, int b) { return a + b; }

int main(void) {
    int a[] = {1,2,3,4};
    printf("%d\n", reduce(a, 4, 0, add));
    return 0;
}

Einen Vergleich übergeben

Sortier- und Suchfunktionen erwarten häufig einen Vergleichs-Callback, damit derselbe Algorithmus für jede Sortierreihenfolge verwendet werden kann.

#include <stdio.h>

int max_by(int a, int b, int (*greater)(int,int)) {
    return greater(a, b) ? a : b;
}

int gt(int a, int b) { return a > b; }

int main(void) {
    printf("%d\n", max_by(3, 8, gt));
    return 0;
}

typedef für Callback-Typen

Wenn Sie den Callback-Typ mit typedef benennen, werden Funktionssignaturen besser lesbar.

#include <stdio.h>

typedef int (*IntFn)(int);

int apply(int x, IntFn f) { return f(x); }

int neg(int x) { return -x; }

int main(void) {
    printf("%d\n", apply(5, neg));
    return 0;
}

Standard-Callback als Ersatz

Wenn ein Callback NULL sein kann, stellen Sie ein Standardverhalten bereit, damit der Aufrufer darauf verzichten kann.

#include <stdio.h>

int apply(int x, int (*f)(int)) {
    if (f == NULL) return x;
    return f(x);
}

int dbl(int x) { return x * 2; }

int main(void) {
    printf("%d\n", apply(9, NULL));
    printf("%d\n", apply(9, dbl));
    return 0;
}

Callbacks entkoppeln den Code

Callbacks halten einen allgemeinen Algorithmus unabhängig von der konkreten Operation. Die Bibliothek stellt die Schleife bereit, Sie stellen das Verhalten bereit.

#include <stdio.h>

void for_each(int *a, int n, void (*visit)(int)) {
    for (int i = 0; i < n; i++) visit(a[i]);
}

void show(int x) { printf("[%d]", x); }

int main(void) {
    int a[] = {7, 8, 9};
    for_each(a, 3, show);
    printf("\n");
    return 0;
}

Callback zur Laufzeit auswählen

Kombinieren Sie die Auswahl anhand einer Bedingung mit der Übergabe: Wählen Sie einen Callback aus und übergeben Sie ihn anschließend an eine Funktion höherer Ordnung.

#include <stdio.h>

int apply(int x, int (*f)(int)) { return f(x); }
int sq(int x) { return x * x; }
int cube(int x) { return x * x * x; }

int main(void) {
    int power = 3;
    int (*f)(int) = (power == 2) ? sq : cube;
    printf("%d\n", apply(2, f));
    return 0;
}

Kurzer Test

Testen Sie Ihr Verständnis der Funktionsübergabe.

Zusammenfassung

Sie haben gelernt, Funktionen als Callbacks zu übergeben:

  • Deklarieren Sie einen Callback-Parameter wie einen Funktionszeiger.
  • Erstellen Sie Funktionen höherer Ordnung wie map, filter, reduce und for_each.
  • Verwenden Sie typedef, um Callback-Typen zu benennen.
  • Fangen Sie NULL-Callbacks mit einem Standardverhalten ab.

Häufig gestellte Fragen

Ist die Lektion „Funktionen übergeben“ kostenlos?

Ja — der vollständige Text von „Funktionen übergeben“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Funktionen übergeben“?

Callbacks als Argumente Du übst C Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C Academy zu starten?

Keine Vorkenntnisse erforderlich. C Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Funktionen übergeben“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C Academy-Lektion Code schreiben und ausführen?

Ja. Jede C Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Funktionszeiger deklarieren
  2. Funktionen übergeben
  3. qsort mit Vergleichsfunktionen
  4. Tabellen mit Funktionszeigern
← Zurück zu C Academy