Referenzübergabe
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 41 von 56.
Wenn Sie Argumente an Funktionen übergeben, erstellt C++ normalerweise Kopien der Werte. Das bedeutet, dass Änderungen innerhalb der Funktion die ursprünglichen Variablen nicht beeinflussen. Pass-by-Reference ändert dieses Verhalten, indem es Funktionen ermöglicht, direkt mit den ursprünglichen Variablen zu arbeiten.
Um per Referenz zu übergeben, fügen Sie das &-Symbol nach dem Parametertyp in Ihrer Funktionsdeklaration hinzu:
void doubleValue(int& number) {
number = number * 2; // Modifiziert die ursprüngliche Variable
}Wenn Sie diese Funktion aufrufen, werden alle Änderungen, die am Parameter innerhalb der Funktion vorgenommen werden, direkt die ursprüngliche Variable ändern, die übergeben wurde. Dies ist besonders nützlich, wenn Sie möchten, dass eine Funktion ihre Argumente ändert oder wenn Sie mit großen Objekten arbeiten, bei denen das Kopieren ineffizient wäre.
Pass-by-Reference eliminiert den Overhead beim Kopieren von Daten, wodurch Ihre Programme schneller und speichereffizienter werden, insbesondere bei komplexen Datenstrukturen wie Vektoren oder Maps.
Aufgabe
EinfachErstellen Sie eine Funktion, die das Prinzip der Übergabe per Referenz (Pass by Reference) demonstriert, indem sie Variablen direkt über Funktionsparameter modifiziert. Diese Herausforderung testet Ihr Verständnis dafür, wie das &-Symbol es Funktionen ermöglicht, mit den Originalvariablen anstatt mit Kopien zu arbeiten.
Die folgenden Eingaben werden bereitgestellt:
- Eine Ganzzahl
value1, die die erste Zahl darstellt - Eine Ganzzahl
value2, die die zweite Zahl darstellt - Eine Ganzzahl
value3, die die dritte Zahl darstellt
Ihr Programm sollte:
- Eine Funktion namens
tripleValueserstellen, die drei Ganzzahl-Parameter per Referenz entgegennimmt - Innerhalb der Funktion jeden Parameter mit 3 multiplizieren
- In der Hauptfunktion (main) die drei Eingabewerte einlesen und in Variablen speichern
- Die ursprünglichen Werte vor dem Funktionsaufruf ausgeben
- Die Funktion
tripleValuesmit den drei Variablen aufrufen - Die modifizierten Werte nach dem Funktionsaufruf ausgeben, um zu zeigen, dass sie geändert wurden
Verwenden Sie das folgende exakte Ausgabeformat:
Vor dem Funktionsaufruf:
Original values: [value1] [value2] [value3]Nach dem Funktionsaufruf:
Tripled values: [new_value1] [new_value2] [new_value3]Die Funktionssignatur sollte das &-Symbol nach jedem Parametertyp verwenden, um die Übergabe per Referenz anzuzeigen: void tripleValues(int& a, int& b, int& c). Dies ermöglicht es der Funktion, die ihr übergebenen Originalvariablen direkt zu modifizieren, was den entscheidenden Unterschied zwischen der Übergabe per Wert (Pass by Value) und der Übergabe per Referenz verdeutlicht. Die Variablen in main werden nach dem Funktionsaufruf dauerhaft geändert sein, was beweist, dass die Funktion mit den ursprünglichen Speicheradressen anstatt mit Kopien gearbeitet hat.
Spickzettel
Um in C++ per Referenz zu übergeben, fügen Sie das Symbol & nach dem Parametertyp in Ihrer Funktionsdeklaration hinzu:
void doubleValue(int& number) {
number = number * 2; // Modifiziert die ursprüngliche Variable
}Die Übergabe per Referenz ermöglicht es Funktionen, direkt mit den ursprünglichen Variablen anstatt mit Kopien zu arbeiten. Änderungen, die an Parametern innerhalb der Funktion vorgenommen werden, modifizieren die ursprünglichen Variablen, die übergeben wurden.
Dies eliminiert den Overhead beim Kopieren von Daten, wodurch Programme schneller und speichereffizienter werden, insbesondere bei komplexen Datenstrukturen wie Vektoren oder Maps.
Probier es selbst
#include <iostream>
using namespace std;
// TODO: Erstellen Sie hier die Funktion tripleValues
int main() {
// Eingabewerte lesen
int value1, value2, value3;
cin >> value1 >> value2 >> value3;
// Ursprüngliche Werte ausgeben
cout << "Original values: " << value1 << " " << value2 << " " << value3 << endl;
// TODO: Rufen Sie hier die Funktion tripleValues auf
// Modifizierte Werte ausgeben
cout << "Tripled values: " << value1 << " " << value2 << " " << value3 << endl;
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung4Maps (Schlüssel-Wert-Paare)
Einführung in std::mapErstellen einer MapWerte abrufen und ändernAuf Schlüssel prüfenPaare entfernenÜber eine Map iterierenZusammenfassung – Wortfrequenz7Fortgeschrittene Funktionen
ReferenzübergabeEinführung in Lambda-AusdrückeLambdas mit ParameternLambdas mit RückgabewertenEinführung in die RekursionRekursive FakultätLambda Sort2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügen