Menu
Coddy logo textTech

Ein klassisches Beispiel: Swap

Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 28 von 63.

Die swap-Funktion ist eines der bekanntesten Beispiele dafür, warum Zeiger in der C-Programmierung unverzichtbar sind. Das Ziel ist einfach: Schreibe eine Funktion, die die Werte zweier Variablen vertauscht. Diese scheinbar unkomplizierte Aufgabe offenbart jedoch eine grundlegende Einschränkung der Übergabe per Wert.

Überlegen Sie, was passiert, wenn Sie versuchen, zwei Variablen mit regulärem Pass-by-Value zu vertauschen:

void badSwap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    // Dies vertauscht nur die Kopien, nicht die ursprünglichen Variablen!
}

Dieser Ansatz schlägt fehl, da die Funktion nur Kopien der Werte erhält. Die ursprünglichen Variablen in der aufrufenden Funktion bleiben unverändert.

Die Lösung erfordert stattdessen die Übergabe von Pointern auf die Variablen:

void swap(int *a, int *b) {
    int temp = *a;  // Speichere den Wert an Adresse a
    *a = *b;        // Schreibe den Wert von Adresse b an Adresse a
    *b = temp;      // Schreibe den gespeicherten Wert an Adresse b
}

Indem die Adressen der Variablen übergeben und der Dereferenzierungsoperator verwendet wird, kann die Funktion die Werte der ursprünglichen Variablen direkt ändern. Dadurch ist die Swap-Funktion ein perfektes Beispiel dafür, wann und warum du Zeiger benötigst, um Aufgaben zu bewältigen, die die Wertübergabe allein nicht erledigen kann.

challenge icon

Aufgabe

Einfach

Schreibe ein C-Programm, das die klassische Tauschfunktion mithilfe von Zeigern implementiert und demonstriert. Dein Programm sollte:

  1. Eine Funktion namens swap erstellen, die zwei Zeiger auf Ganzzahlen als Parameter entgegennimmt
  2. Innerhalb der Funktion swap die Werte an den Speicheradressen, auf die die beiden Zeiger zeigen, mithilfe einer temporären Variable austauschen
  3. In der Funktion main zwei Ganzzahlen aus der Benutzereingabe einlesen
  4. Die ursprünglichen Werte im folgenden Format ausgeben: Before swap: a = [value], b = [value]
  5. Die Funktion swap aufrufen und die Adressen beider Variablen mithilfe des Adressoperators übergeben
  6. Nach dem Funktionsaufruf die vertauschten Werte im folgenden Format ausgeben: After swap: a = [value], b = [value]

Deine Ausgabe sollte zeigen, dass die Funktion die Werte der ursprünglichen Variablen erfolgreich austauscht:

Before swap: a = [first_input], b = [second_input]
After swap: a = [second_input], b = [first_input]

Diese Herausforderung zeigt, warum Zeiger für den Tauschvorgang unerlässlich sind – die Funktion muss auf die Speicherstellen der ursprünglichen Variablen zugreifen, um ihre Werte dauerhaft auszutauschen, was bei der Übergabe per Wert unmöglich ist.

Probier es selbst

#include <stdio.h>

// TODO: Schreiben Sie hier Ihre Swap-Funktion

int main() {
    int a, b;
    
    // Eingabe lesen
    scanf("%d", &a);
    scanf("%d", &b);
    
    // Ursprüngliche Werte ausgeben
    printf("Before swap: a = %d, b = %d\n", a, b);
    
    // TODO: Rufen Sie hier Ihre Swap-Funktion auf
    
    // Vertauschte Werte ausgeben
    printf("After swap: a = %d, b = %d\n", a, b);
    
    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 Logik & Ablauf

Übe selbstständig: Online-C-Compiler