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
EinfachErstelle eine Funktion, die die Übergabe per Referenz demonstriert, indem sie Variablen direkt über Funktionsparameter verändert. Diese Herausforderung testet dein Verständnis dafür, wie das Symbol & Funktionen ermöglicht, mit den ursprünglichen Variablen statt 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
Dein Programm sollte:
- Eine Funktion namens
tripleValueserstellen, die drei Ganzzahlparameter als Referenzen entgegennimmt - Innerhalb der Funktion jeden Parameter mit 3 multiplizieren
- In der Funktion main die drei Eingabewerte einlesen und in Variablen speichern
- Die ursprünglichen Werte vor dem Aufruf der Funktion ausgeben
- Die Funktion
tripleValuesmit den drei Variablen aufrufen - Die geänderten Werte nach dem Funktionsaufruf ausgeben, um zu zeigen, dass sie verändert wurden
Verwende das folgende genaue Ausgabeformat:
Vor dem Funktionsaufruf:
Original values: [value1] [value2] [value3]Nach dem Funktionsaufruf:
Tripled values: [new_value1] [new_value2] [new_value3]Die Funktionssignatur sollte nach jedem Parametertyp das Symbol & verwenden, um die Übergabe per Referenz anzuzeigen: void tripleValues(int& a, int& b, int& c). Dadurch kann die Funktion die übergebenen ursprünglichen Variablen direkt verändern, wodurch der entscheidende Unterschied zwischen der Übergabe per Wert und der Übergabe per Referenz demonstriert wird. Die Variablen in main werden nach dem Funktionsaufruf dauerhaft verändert sein. Dies beweist, dass die Funktion mit den ursprünglichen Speicherstellen und nicht mit Kopien gearbeitet hat.
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Übe selbstständig: Online-C++-Compiler