Menu
Coddy logo textTech

Funktionszeiger deklarieren

Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 33 von 61.

Bisher haben wir gelernt, Vererbung mithilfe von Struct-Embedding zu simulieren. Aber echte Polymorphie — bei der verschiedene Objekte unterschiedlich auf denselben Aufruf reagieren — erfordert etwas mehr: Funktionszeiger.

Ein Funktions-Pointer ist eine Variable, die die Adresse einer Funktion speichert. Genauso wie ein regulärer Pointer die Adresse von Daten hält, hält ein Funktions-Pointer die Adresse von ausführbarem Code.

Die Syntax kann auf den ersten Blick einschüchternd wirken. Um einen Funktionspointer zu deklarieren, geben Sie den Rückgabetyp an, dann den Pointer-Namen 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 entgegennimmt und ein int zurückgibt. Die Klammern um *operation sind entscheidend — ohne sie würden Sie eine Funktion deklarieren, die einen Zeiger zurückgibt.

Um dieser Funktion einen Pointer 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 seine Adresse. Sie können auch explizit &add verwenden, aber das ist optional – beide Formen sind in C äquivalent.

challenge icon

Aufgabe

Einfach

Lassen Sie uns das Deklarieren von Funktionstzeigern und das Zuweisen von Funktionen üben. Sie erstellen ein einfaches mathematisches Operationssystem, bei dem ein Funktionstzeiger verschiedene arithmetische Funktionen halten kann.

Schreiben Sie ein Programm, das:

  1. Zwei Funktionen definiert:
    • multiply — nimmt zwei int-Parameter entgegen und gibt deren Produkt zurück
    • subtract — nimmt zwei int-Parameter entgegen und gibt den ersten minus den zweiten zurück
  2. In main eine Funktionstzeigervariable operation deklariert, die auf Funktionen zeigen kann, die zwei int-Parameter entgegennehmen und ein int zurückgeben
  3. Drei Eingaben liest: zwei Ganzzahlen und einen Operationscode (1 für multiply, 2 für subtract)
  4. Basierend auf dem Operationscode dem operation-Zeiger die entsprechende Funktion zuweist
  5. Den Namen der zugewiesenen Operation ausgibt und anschließend das Ergebnis des Aufrufs der Funktion über den Zeiger ausgibt

Sie erhalten drei Eingaben: die erste Zahl, die zweite Zahl und den Operationscode (1 oder 2).

Ihre Ausgabe sollte wie folgt aussehen:

Operation: multiply
Result: 35

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

Denken Sie daran: Um den Funktionstzeiger zu deklarieren, benötigen Sie den Rückgabetyp, den Zeigernamen in Klammern mit einem Sternchen und die Parametertypen. Um eine Funktion zuzuweisen, verwenden Sie einfach 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 mit zwei int-Parametern und int-Rückgabewert zeigen kann
    
    
    // TODO: Weise basierend auf dem Operationscode (1 für multiply, 2 für subtract)
    // 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 Object Oriented Programming