Menu
Coddy logo textTech

Funktionszeiger deklarieren

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

Bisher haben wir gelernt, Vererbung mithilfe der Einbettung von Strukturen zu simulieren. Doch echter Polymorphismus, bei dem verschiedene Objekte unterschiedlich auf denselben Aufruf reagieren, erfordert etwas mehr: Funktionszeiger.

Ein Funktionszeiger ist eine Variable, die die Adresse einer Funktion speichert. So wie ein regulärer Zeiger die Adresse von Daten enthält, enthält ein Funktionszeiger die Adresse von ausführbarem Code.

Die Syntax kann auf den ersten Blick einschüchternd wirken. Um einen Funktionszeiger zu deklarieren, gibst du den Rückgabetyp an, dann den Zeigernamen in Klammern mit einem Sternchen, gefolgt von den Parametertypen:

int (*operation)(int, int);

Dies deklariert eine Variable namens operation, die auf jede Funktion verweisen kann, die zwei int-Parameter übernimmt und einen int zurückgibt. Die Klammern um *operation sind entscheidend; ohne sie würdest du eine Funktion deklarieren, die einen Zeiger zurückgibt.

Um diesem Zeiger eine Funktion zuzuweisen, verwende einfach den Namen der Funktion (ohne Klammern):

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

int (*operation)(int, int);
operation = add;  // Jetzt zeigt operation auf add

Der Funktionsname dient als ihre Adresse. Du kannst auch explizit &add verwenden, aber das ist optional: Beide Formen sind in C gleichwertig.

challenge icon

Aufgabe

Einfach

Üben wir das Deklarieren von Funktionszeigern und das Zuweisen von Funktionen zu ihnen. Du erstellst ein einfaches System für mathematische Operationen, in dem ein Funktionszeiger verschiedene arithmetische Funktionen enthalten kann.

Schreibe ein Programm, das:

  1. Zwei Funktionen definiert:
    • multiply: nimmt zwei int-Parameter entgegen und gibt ihr Produkt zurück
    • subtract: nimmt zwei int-Parameter entgegen und gibt die Differenz aus der ersten minus der zweiten Zahl zurück
  2. in main eine Funktionszeigervariable namens operation deklariert, die auf Funktionen zeigen kann, die zwei int-Parameter entgegennehmen und einen int zurückgeben
  3. drei Eingaben einliest: zwei Ganzzahlen und einen Operationscode (1 für multiply, 2 für subtract)
  4. abhängig vom Operationscode die passende Funktion deinem Zeiger operation zuweist
  5. den Namen der zugewiesenen Operation ausgibt und anschließend das Ergebnis des Aufrufs der Funktion über den Zeiger ausgibt

Du erhältst drei Eingaben: die erste Zahl, die zweite Zahl und den Operationscode (1 oder 2).

Deine Ausgabe sollte so aussehen:

Operation: multiply
Result: 35

Dabei ist multiply der Name der Operation (oder subtract, wenn der Code 2 ist), und 35 das Ergebnis des Aufrufs der Funktion über deinen Zeiger (in diesem Fall 5 × 7).

Denke daran: Um den Funktionszeiger zu deklarieren, benötigst du den Rückgabetyp, den Zeigernamen in Klammern mit einem Sternchen sowie die Parametertypen. Um eine Funktion zuzuweisen, verwende nur den Funktionsnamen ohne Klammern.

Probier es selbst

#include <stdio.h>

// TODO: Definiere die multiply-Funktion hier


// TODO: Definiere die subtract-Funktion hier


int main() {
    int num1, num2, code;
    
    // Eingabe lesen
    scanf("%d", &num1);
    scanf("%d", &num2);
    scanf("%d", &code);
    
    // TODO: Deklariere einen Funktionszeiger namens 'operation', der auf
    // Funktionen zeigen kann, die zwei int-Parameter nehmen und ein int zurückgeben
    
    
    // TODO: Basierend auf dem Operationscode (1 für multiply, 2 für subtract),
    // weise die entsprechende Funktion deinem operation-Zeiger zu
    
    
    // TODO: Gib den Operationsnamen und das Ergebnis aus
    // Format:
    // Operation: <name>
    // Result: <result>
    
    return 0;
}
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