Menu
Coddy logo textTech

Funktionen als Argumente übergeben

Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 36 von 61.

Eine der leistungsfähigsten Anwendungen von Funktionszeigern besteht darin, sie als Argumente an andere Funktionen zu übergeben. Dadurch kannst du benutzerdefiniertes Verhalten in eine Funktion einschleusen, ohne ihren Code zu ändern: eine Technik, die manchmal als Callback bezeichnet wird.

Betrachte eine Funktion, die eine Berechnung mit zwei Zahlen durchführt. Anstatt die Operation fest zu codieren, kannst du einen Funktionszeiger akzeptieren, der festlegt, welche Operation ausgeführt werden soll:

typedef int (*Operation)(int, int);

int compute(int a, int b, Operation op) {
    return op(a, b);
}

Die Funktion compute weiß nicht, ob sie addiert, subtrahiert oder etwas völlig anderes tut. Sie ruft einfach die Funktion auf, die ihr übergeben wird:

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

int main() {
    printf("%d\n", compute(5, 3, add));       // Ausgabe: 8
    printf("%d\n", compute(5, 3, multiply));  // Ausgabe: 15
    return 0;
}

Beachte, wie dieselbe Funktion compute je nachdem, welche Funktion wir übergeben, unterschiedliche Ergebnisse liefert. Dieses Muster ist grundlegend für das Schreiben von flexiblem, wiederverwendbarem Code. Du schreibst die Struktur einmal, und die Nutzer deiner Funktion stellen die spezifische Logik bereit, die sie benötigen.

challenge icon

Aufgabe

Einfach

Schreibe eine Funktion apply_twice, die zwei Ganzzahlen und einen Operationscode entgegennimmt, die Operation zweimal hintereinander auf die Zahlen anwendet und das Endergebnis zurückgibt.

Deine Funktion erhält einen Operationscode, der bestimmt, welche Operation verwendet werden soll. Du musst die Operationsfunktionen innerhalb deiner Lösung definieren und sie an eine Hilfsfunktion compute übergeben, die einen Funktionszeiger akzeptiert.

Hinweis: Es werden nur die Funktionen benötigt. Die Tests rufen apply_twice direkt auf und prüfen den Rückgabewert. Lies daher keine Eingaben ein und gib nichts aus.

Erforderliche Struktur:

  • Definiere ein typedef namens Operation für einen Funktionszeiger, der zwei int-Parameter entgegennimmt und einen int zurückgibt
  • Definiere zwei Operationsfunktionen: add (gibt a + b zurück) und multiply (gibt a * b zurück)
  • Definiere eine Funktion compute, die zwei Ganzzahlen und einen Operation-Funktionszeiger entgegennimmt und anschließend das Ergebnis des Aufrufs der Operation zurückgibt
  • Wähle in apply_twice abhängig vom Code die passende Operation aus und verwende anschließend zweimal compute: zuerst mit den ursprünglichen Zahlen, dann erneut mit dem Ergebnis und der zweiten Zahl

Logik:

  1. Wähle die Operationsfunktion abhängig von op_code aus (1 = add, 2 = multiply)
  2. Rufe compute(a, b, operation) auf, um ein Zwischenergebnis zu erhalten
  3. Rufe compute(intermediate, b, operation) auf, um das Endergebnis zu erhalten
  4. Gib das Endergebnis zurück

Parameter:

  • a (int): Erste Zahl
  • b (int): Zweite Zahl
  • op_code (int): Operationscode (1 für add, 2 für multiply)

Rückgabe: Das Ergebnis, nachdem die Operation zweimal hintereinander angewendet wurde (int)

Beispiel: Mit a = 5, b = 3, op_code = 1 (add):

  • Erste Berechnung: 5 + 3 = 8
  • Zweite Berechnung: 8 + 3 = 11
  • Rückgabe: 11

Mit a = 2, b = 4, op_code = 2 (multiply):

  • Erste Berechnung: 2 × 4 = 8
  • Zweite Berechnung: 8 × 4 = 32
  • Rückgabe: 32

Probier es selbst

int apply_twice(int a, int b, int op_code) {
    // Schreibe hier den Code
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C-Compiler