Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Wie Unterscheiden Sich Referenzen von Pointern? | Referenzen
C++ Smart Pointers
course content

Kursinhalt

C++ Smart Pointers

C++ Smart Pointers

1. Einführung in Smart Pointer
2. Einzigartige Zeiger
3. Gemeinsame Zeiger
4. Schwache Zeiger
5. Referenzen
6. Fortgeschrittene Themen

book
Wie Unterscheiden Sich Referenzen von Pointern?

Verständnis von Referenzen

Im ersten Abschnitt haben wir gesehen, dass Referenzen Aliase für bestehende Variablen sind. Das Hauptziel von Referenzen ist es, eine alternative Syntax für den Zugriff auf den Wert eines Objekts bereitzustellen. Wenn wir unter die Haube schauen, ist die Speicheradresse einer Referenz dieselbe wie die Speicheradresse des referenzierten Objekts.

cpp

main

copy
1234567891011121314
#include <iostream> int main() { int num = 42; int& refNum = num; // Output memory addresses std::cout << "Address of num: " << &num << std::endl; std::cout << "Address of refNum: " << &refNum << std::endl; // Output values std::cout << "Value of num: " << num << std::endl; std::cout << "Value of refNum: " << refNum << std::endl; }

Wenn Sie den obigen Code ausführen, werden Sie sehen, dass sowohl die Variable num als auch die Referenz refNum die gleichen Werte und die gleichen Speicheradressen haben.

Eine Referenz ist im Wesentlichen ein konstanter Zeiger

Eine andere Möglichkeit, darüber nachzudenken, ist, dass eine Referenz im Wesentlichen ein konstanter Zeiger ist. Ein konstanter Zeiger ist ein Zeiger, der nach der Initialisierung nicht auf ein anderes dynamisches Objekt umgeleitet werden kann. Ein konstanter Zeiger muss jedoch dereferenziert werden, um den Wert des dynamischen Objekts zu erhalten. Bei Referenzen müssen Sie nicht dereferenzieren, da Sie direkt auf den Wert zugreifen können. Betrachten wir ein Beispiel für mehr Klarheit:

cpp

main

copy
1234567891011121314151617181920
#include <iostream> int main() { // Example with a reference int num1 = 42; int& refNum = num1; // Example with a constant pointer int num2 = 73; int* const ptrNum = &num2; // Attempting to reassign the reference or constant pointer will result in a compilation error // refNum = num2; // Uncommenting this line will just set num1 value to num2 value // ptrNum = &num1; // Uncommenting this line will cause a compilation error // Output values directly through reference and with dereferencing constant pointer std::cout << "Value of num1 through refNum: " << refNum << std::endl; std::cout << "Value of num2 through ptrNum: " << *ptrNum << std::endl; }

Im obigen Code demonstrieren wir viele Dinge. Zuerst erstellen wir einen konstanten Zeiger und eine Referenz. Dann zeigen wir, dass keiner von beiden neu zugewiesen werden kann. Schließlich drucken wir ihre Werte: Für den konstanten Zeiger müssen wir * zum Dereferenzieren verwenden, aber die Referenz kann direkt zugegriffen werden. Experimentieren Sie mit dem Code, um mehr zu lernen, während Sie den Kommentaren folgen!

Unterschied
Zeiger
Referenz
Auf NULL setzenKann auf NULL gesetzt werdenKann nicht auf NULL gesetzt werden
Adresse im SpeicherHat eine eigene Adresse im SpeicherHat keine eigene Adresse im Speicher
InitialisierungKann nicht initialisiert bleibenMuss initialisiert werden oder verursacht einen Compilerfehler
Zeiger auf einen anderen ZeigerMöglichNicht möglich
Array-ErstellungArray von Zeigern kann erstellt werdenArray von Referenzen kann nicht erstellt werden
Zugriff auf Klassen-/StrukturmitgliederVerwenden Sie ->, um auf Mitglieder zuzugreifenVerwenden Sie ., um auf Mitglieder zuzugreifen
Welche Adresse haben Referenzen im Speicher?

Welche Adresse haben Referenzen im Speicher?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 1
We're sorry to hear that something went wrong. What happened?
some-alt