Menu
Coddy logo textTech

Structs per Wert übergeben

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

Da du nun weißt, wie man mit Strukturen und Zeigern auf Strukturen arbeitet, ist es an der Zeit zu lernen, wie man ganze Strukturen an Funktionen übergibt. Wenn du eine Struktur als Parameter an eine Funktion übergibst, verwendet C die Wertübergabe, was bedeutet, dass die Funktion eine vollständige Kopie der Struktur erhält.

Hier ist die Syntax für eine Funktion, die einen Struct-Parameter akzeptiert:

void functionName(struct StructureName parameterName) {
    // Funktionskörper
}

Unter Verwendung unserer bekannten Point-Struktur als Beispiel:

void printPoint(struct Point p) {
    printf("Point coordinates: (%d, %d)\n", p.x, p.y);
}

Das zentrale Konzept, das du verstehen solltest, ist, dass alle Änderungen, die du an der Struktur innerhalb der Funktion vornimmst, die ursprüngliche Struktur in der aufrufenden Funktion nicht beeinflussen werden. Das liegt daran, dass die Funktion mit ihrer eigenen Kopie der Daten arbeitet.

Dieser Ansatz ist nützlich, wenn du Struct-Daten lesen oder anzeigen möchtest, ohne versehentliche Änderungen am Original zu riskieren. Denke jedoch daran, dass das Kopieren großer Structs in Bezug auf Speicher und Leistung ineffizient sein kann.

challenge icon

Aufgabe

Einfach

Erstelle ein C-Programm, das die Übergabe von Strukturen an Funktionen per Wert demonstriert. Dein Programm sollte:

  1. Eine struct namens Rectangle mit den folgenden Mitgliedern definieren:
    • Eine Ganzzahl width, um die Breite des Rechtecks zu speichern
    • Eine Ganzzahl height, um die Höhe des Rechtecks zu speichern
    • Ein Zeichen-Array color mit der Größe 15, um die Farbe des Rechtecks zu speichern
  2. Eine Funktion namens displayRectangle schreiben, die:
    • Eine Rectangle-Struktur als Parameter entgegennimmt (Übergabe per Wert)
    • Die Informationen zum Rechteck in genau diesem Format ausgibt:
      • Rectangle Details:
      • Width: [width]
      • Height: [height]
      • Color: [color]
      • Area: [area]
    • Die Fläche berechnet und ausgibt (Breite × Höhe)
  3. Eine Funktion namens modifyRectangle schreiben, die:
    • Eine Rectangle-Struktur als Parameter entgegennimmt (Übergabe per Wert)
    • Sowohl die Breite als auch die Höhe des Rechtecks verdoppelt
    • Die Farbe in "Modified" ändert
    • Inside modifyRectangle function: ausgibt
    • displayRectangle aufruft, um das geänderte Rechteck anzuzeigen
  4. In der main-Funktion:
    • Eine Rectangle-Variable namens rect erstellt
    • Die Breite, Höhe und Farbe aus der Eingabe liest und den Strukturmitgliedern zuweist
    • Original rectangle: ausgibt
    • displayRectangle aufruft, um das ursprüngliche Rechteck anzuzeigen
    • modifyRectangle mit dem Rechteck aufruft
    • After modifyRectangle call: ausgibt
    • displayRectangle erneut aufruft, um zu zeigen, dass das ursprüngliche Rechteck unverändert ist

Diese Aufgabe demonstriert das zentrale Konzept der Übergabe per Wert bei Strukturen: Wenn du eine Struktur an eine Funktion übergibst, erhält die Funktion eine vollständige Kopie der Struktur. Alle innerhalb der Funktion vorgenommenen Änderungen wirken sich nur auf die Kopie aus, nicht auf die ursprüngliche Struktur in der aufrufenden Funktion.

Probier es selbst

#include <stdio.h>
#include <string.h>

// TODO: Definieren Sie hier das Rectangle-Struct

// TODO: Schreiben Sie hier die displayRectangle-Funktion

// TODO: Schreiben Sie hier die modifyRectangle-Funktion

int main() {
    // Eingabe lesen
    int width, height;
    char color[15];
    
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%s", color);
    
    // TODO: Rectangle-Variable erstellen und Eingabewerte zuweisen
    
    // TODO: "Original rectangle:" ausgeben und displayRectangle aufrufen
    
    // TODO: modifyRectangle aufrufen
    
    // TODO: "After modifyRectangle call:" ausgeben und displayRectangle erneut aufrufen
    
    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