Sowohl Zeiger als auch Referenzen sind die leistungsfähigsten Funktionen in C und C ++, mit denen Programmierer die Speicheradresse direkt bearbeiten können, um eine effiziente Speicherverwaltung zu ermöglichen.
Beide sind Variablen, die indirekt verwendet werden, um auf andere Objekte zu verweisen, und sie haben einige gemeinsame Merkmale auf der Oberfläche. Obwohl sie viele gemeinsame Fähigkeiten besitzen, sind sie auch sehr komplex zu verstehen.
Ein Zeiger ist eine Variable, die die Speicheradresse einer anderen Variablen enthält, während ein Verweis einem Zeiger ähnelt, mit dem indirekt auf eine andere Variable verwiesen werden kann.
Die meisten Programmierer scheinen ein gewisses Verständnis dafür zu haben, wann Zeiger und Referenzen verwendet werden, aber sie stoßen oft auf Probleme, deren Lösung unklar erscheint.
Um die Philosophie besser zu verstehen, sollten wir den Unterschied zwischen den beiden verstehen.
Jede Variable ist ein Speicherort, der durch seine Adresse definiert wird und mit einer Kennung gepaart ist, die einen Wert enthält, der während des Programmverlaufs geändert werden kann. In einfachen Worten ist Variable ein Symbol, das eine Menge darstellt.
Ein Zeiger ist eine Variable, die die Speicheradresse einer anderen Variablen enthält. Ein Zeiger ist nichts anderes als eine Adresse und eine Variable, die einen Zeiger speichert, wird als Zeigervariable bezeichnet.
Die Idee ist, Bezeichner (oder Namen) anstelle von numerischen Adressen zu verwenden, um das Programmieren zu erleichtern, wodurch die Komplexität der Programme verringert wird. Da sich diese Adressen auf tatsächliche Positionen im Computerspeicher beziehen, können Zeiger verwendet werden, um auf im Speicher gespeicherte Inhalte zuzugreifen und diese zu bearbeiten.
Wie jede Variable oder Konstante müssen Zeiger für ihren Typ deklariert werden. Da Zeiger Speicheradressen enthalten, die zu einem separaten Datentyp gehören, müssen sie mit Zeigern deklariert werden, bevor Sie mit ihnen arbeiten können. Die allgemeine Form einer Zeigerdeklaration lautet:
Datentyp * Variablenname;
Hier ist "Data_type" der Basistyp des Zeigers und "var-name" die Zeigervariable. Mit dem Sternchen (*) wird hier der Zeiger deklariert, der die Variable „var-name“ als Zeigervariable bezeichnet.
int * p; // Ganzzahlzeiger
float * x; // Gleitzeiger
Hier verweist die Variable "p" auf einen ganzzahligen Datentyp, der als "int" deklariert ist und auf den Datentyp der Variablen verweist. In ähnlicher Weise bezieht sich "float" im zweiten Beispiel auf den Datentyp der Variablen "x", der tatsächlich als Zeiger auf eine Gleitkommavariable bezeichnet wird.
Eine Referenz ist wie ein Zeiger mit indirektem Zugriff auf eine Variable. Es ist wie ein Alias für eine andere Variable, dh es ist nur ein anderer Name für eine bereits vorhandene Variable.
Damit können Programmierer einen zweiten Namen für die Variable erstellen, mit dem sie den in dieser Variablen gespeicherten Inhalt bearbeiten können. Dies ist eine Entität, die ein Alias für eine andere Variable ist und dieselbe Adresse wie die ursprüngliche Variable hat. Es unterstützt Pass-by-Reference, das als formale Funktionsparameter fungiert. Wenn es einmal definiert wurde, um auf eine Variable zu verweisen, kann es nicht erneut verwendet werden, dh es kann nicht auf eine andere Variable verwiesen werden.
Im Gegensatz zu Zeigern benötigen sie keinen Dereferenzierungsoperator, um auf den Wert zuzugreifen. Sie können wie normale Variablen verwendet werden.
int i;
int & ri = i;
Hier ist "ri" eine ganzzahlige Referenz, die mit "i" initialisiert wird. Es deklariert "ri" als Objekt vom Typ "Verweis auf int". Eine Referenz kann leicht mit einem Zeiger verwechselt werden, bei dem es sich um eine unabhängige Variable handelt, deren Adresswerte nach der Erstellung nicht erneut zugewiesen werden können.
- Beide bieten nahezu ähnliche Fähigkeiten in Bezug auf die Benutzerfreundlichkeit, und die Unterscheidung kann schwierig sein. Ein Zeiger ist nur eine Variable, die die Speicheradresse einer anderen Variablen speichert, während ein Verweis wie ein Alias für eine bereits vorhandene Variable ist. Es erstellt einen zweiten Namen für eine Variable, mit dem der in dieser Variablen gespeicherte Inhalt geändert werden kann.
- Ein Zeiger ist wie jede andere Variable, die ein Datenelement speichert. Im Gegensatz zu anderen Variablen speichern Zeigervariablen Speicheradressen statt Werte. Ein Zeiger wird mit dem Indirektionsoperator * dereferenziert, um auf den Speicherplatz der Variablen zuzugreifen, auf die er verweist. Eine Referenz benötigt dagegen keinen Dereferenzierungsoperator, um auf den Wert zuzugreifen.
- Im Gegensatz zu Zeigern, die jederzeit initialisiert werden können, müssen Referenzen bei der Initialisierung zugewiesen werden. Auf Zeiger kann direkt zugegriffen werden, während auf Verweise nicht direkt zugegriffen werden kann.
- Eine Zeigervariable hat einen eigenen Speicherort. Wenn Sie einen Zeiger deklarieren, geben Sie einen Speicherort an, der eine Speicheradresse ist, die jeder Speichereinheit zugewiesen ist. Die Zeigervariable hat dieselbe Adresse, an der sie gespeichert wurde. Eine Referenzvariable hingegen ist ein Alias für eine andere Variable, wobei die Adresse der Referenzvariablen übernommen wird.
- NULL steht für das Ende der Liste. Dies bedeutet, dass der Wert unbekannt ist und dass die Variable keinen gültigen Adressraum hat. Der NULL-Wert kann direkt einer Zeigervariable zugewiesen werden, was darauf hindeutet, dass sie nirgendwo hinweist, während NULL keiner Referenzvariablen zugewiesen werden kann.
Zeiger gehören seit jeher zu den Lieblingsthemen der Diskussion von C / C ++ - Programmierern, bis Verweise auf das Bild kamen. Referenzen sind den Zeigern ein wenig ähnlich, haben jedoch einen angemessenen Anteil von Vor- und Nachteilen im Vergleich. Während beide verwendet werden können, um lokale Variablen einer Funktion innerhalb einer anderen Funktion zu ändern, haben sie ihre Unterschiede. Beide sind leistungsstarke Funktionen in C und C ++, mit denen Sie den Arbeitsspeicher direkt bearbeiten können, jedoch mit wenigen Ausnahmen. Ein Zeiger enthält die Speicheradresse einer Variablen, während eine Referenz nur ein Alias für eine andere Variable ist.