C++ Hinweise mit Beispielen

Was sind Zeiger?

In C++Ein Zeiger bezieht sich auf eine Variable, die die Adresse einer anderen Variable enthรคlt. Wie normale Variablen haben Zeiger einen Datentyp. Beispielsweise kann ein Zeiger vom Typ โ€žIntegerโ€œ die Adresse einer Variablen vom Typ โ€žIntegerโ€œ enthalten. Ein Zeiger vom Typ โ€žZeichenโ€œ kann die Adresse einer Variablen vom Typ โ€žZeichenโ€œ enthalten.

Sie sollten einen Zeiger als symbolische Darstellung einer Speicheradresse betrachten. Mit Zeigern kรถnnen Programme Call-by-Reference simulieren. Sie kรถnnen auch dynamische Datenstrukturen erstellen und manipulieren. In C++, eine Zeigervariable bezieht sich auf eine Variable, die auf eine bestimmte Adresse in einem Speicher zeigt, auf den eine andere Variable zeigt.

Adressen in C++

Verstehen C++ Zeiger mรผssen Sie verstehen, wie Computer Daten speichern.

Wenn Sie eine Variable in Ihrem C++ Programm wird ihm ein Speicherplatz im Computerspeicher zugewiesen. Der Wert dieser Variable wird am zugewiesenen Speicherort gespeichert.

Um den Speicherort der Daten im Computerspeicher zu kennen, C++ bietet die & (Referenz-)Operator. Der Operator gibt die Adresse zurรผck, die eine Variable einnimmt.

Wenn x beispielsweise eine Variable ist, gibt &x die Adresse der Variablen zurรผck.

Syntax der Zeigerdeklaration

Die Erklรคrung von C++ hat die folgende Syntax:

datatype *variable_name; 
  • Der Datentyp ist der Basistyp des Zeigers, der ein gรผltiger C++ Datentyp.
  • Der Variablenname sollte der Name der Zeigervariablen sein.
  • Das oben zur Zeigerdeklaration verwendete Sternchen รคhnelt dem Sternchen, das zur Durchfรผhrung einer Multiplikationsoperation verwendet wird. Es ist das Sternchen, das die Variable als Zeiger kennzeichnet.

Hier ist ein Beispiel fรผr gรผltige Zeigerdeklarationen in C++:

int    *x;    // a pointer to integer
double *x;    // a pointer to double
float  *x;    // a pointer to float
char   *ch     // a pointer to a character

Referenzoperator (&) und Referenzoperator (*)

Der Referenzoperator (&) gibt die Adresse der Variablen zurรผck.

Der Dereferenzierungsoperator (*) hilft uns, den Wert zu erhalten, der in einer Speicheradresse gespeichert wurde.

Beispielsweise:

Wenn wir eine Variable mit dem Namen num haben, wird sie an der Adresse 0x234 gespeichert und speichert den Wert 28.

Der Referenzoperator (&) gibt 0x234 zurรผck.

Der Dereferenzierungsoperator (*) gibt 5 zurรผck.

Beispiel 1:

#include <iostream>
using namespace std;
int main() {
	int  x = 27;  
	int  *ip;        
	ip = &x;       
	cout << "Value of x is : ";
	cout << x << endl;
	cout << "Value of ip is : ";
	cout << ip<< endl;
	cout << "Value of *ip is : ";
	cout << *ip << endl;
	return 0;
}

Ausgang:

Referenzoperator (&) und Referenzoperator (*)

Wie das funktioniert:

Referenzoperator (&) und Referenzoperator (*)

Hier ist ein Screenshot des Codes:

Referenzoperator (&) und Referenzoperator (*)

Code Erlรคuterung:

  1. Importieren Sie die iostream-Headerdatei. Dadurch kรถnnen wir die in der Header-Datei definierten Funktionen verwenden, ohne dass Fehler auftreten.
  2. SchlieรŸen Sie den std-Namespace ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  3. Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil dieser Funktion hinzugefรผgt werden. Das { markiert den Anfang des Funktionskรถrpers.
  4. Deklarieren Sie eine ganzzahlige Variable x und weisen Sie ihr den Wert 27 zu.
  5. Deklarieren Sie eine Zeigervariable *ip.
  6. Speichern Sie die Adresse der Variablen x in der Zeigervariablen.
  7. Drucken Sie einen Text auf der Konsole.
  8. Geben Sie den Wert der Variablen x auf dem Bildschirm aus.
  9. Drucken Sie einen Text auf der Konsole.
  10. Geben Sie die Adresse der Variablen x aus. Der Wert der Adresse wurde in der Variablen ip gespeichert.
  11. Drucken Sie einen Text auf der Konsole.
  12. Druckwert, der an der Adresse des Zeigers gespeichert ist.
  13. Das Programm sollte bei erfolgreicher Ausfรผhrung einen Wert zurรผckgeben.
  14. Ende des Hauptteils der main()-Funktion.

Zeiger und Arrays

Arrays und Zeiger basieren auf einem verwandten Konzept. Bei der Arbeit mit Arrays mit Zeigern sind verschiedene Dinge zu beachten. Der Array-Name selbst bezeichnet die Basisadresse des Arrays. Das bedeutet, dass Sie zum Zuweisen der Adresse eines Arrays zu einem Zeiger kein kaufmรคnnisches Und-Zeichen (&) verwenden sollten.

Beispielsweise:

p = arr;

Das Obige ist korrekt, da arr die Adresse der Arrays darstellt. Hier ist ein weiteres Beispiel:

p = &arr;

Das Obige ist falsch.

Wir kรถnnen ein Array implizit in einen Zeiger umwandeln. Zum Beispiel:

int arr [20];
int * ip;

Unten sehen Sie eine gรผltige Operation:

ip = arr;

Nach der obigen Deklaration sind ip und arr gleichwertig und haben gemeinsame Eigenschaften. Allerdings kann ip eine andere Adresse zugewiesen werden, arr kรถnnen wir jedoch nichts zuweisen.

Beispiel 2:

Dieses Beispiel zeigt, wie man ein Array mithilfe von Zeigern durchlรคuft:

#include <iostream>
using namespace std;
int main() {
	int *ip;
	int arr[] = { 10, 34, 13, 76, 5, 46 };
	ip = arr;
	for (int x = 0; x < 6; x++) {
		cout << *ip << endl;
		ip++;
	}
	return 0;
}

Ausgang:

Zeiger und Arrays

Hier ist ein Screenshot des Codes:

Zeiger und Arrays

Code Erlรคuterung:

  1. Deklarieren Sie eine ganzzahlige Zeigervariable ip.
  2. Deklarieren Sie ein Array mit dem Namen arr und speichern Sie darin 6 Ganzzahlen.
  3. Weisen Sie arr der IP zu. IP und arr werden gleichwertig.
  4. Erstellen Sie eine for-Schleife. Die Schleifenvariable x wurde erstellt, um die Array-Elemente von Index 0 bis 5 zu durchlaufen.
  5. Druckt die Werte, die an der Adresse des Zeigers IP gespeichert sind. Pro Iteration wird ein Wert zurรผckgegeben und insgesamt werden 6 Wiederholungen durchgefรผhrt. Das Endl ist ein C++ Schlรผsselwort, das die Endzeile bezeichnet. Mit dieser Aktion kรถnnen Sie den Cursor nach dem Drucken jedes Werts in die nรคchste Zeile verschieben. Jeder Wert wird in einer eigenen Zeile gedruckt.
  6. Um den Zeiger nach jeder Iteration auf die nรคchste int-Position zu bewegen.
  7. Ende der for-Schleife.
  8. Das Programm muss bei erfolgreicher Ausfรผhrung etwas zurรผckgeben.
  9. Ende des main()-Funktionskรถrpers.

Null Zeiger

Wenn es keine genaue Adresse gibt, die zugewiesen werden soll, kann der Zeigervariablen ein NULL zugewiesen werden. Dies sollte wรคhrend der Erklรคrung erfolgen. Ein solcher Zeiger wird als Nullzeiger bezeichnet. Sein Wert ist Null und ist in vielen Standardbibliotheken wie iostream definiert.

Beispiel 3:

#include <iostream>
using namespace std;
int main() {
	int  *ip = NULL;
	cout << "Value of ip is: " << ip;
	return 0;
}

Ausgang:

Null Zeiger

Hier ist ein Screenshot des Codes:

Null Zeiger

Code Erlรคuterung:

  1. Deklarieren Sie eine Zeigervariable ip und weisen Sie ihr den Wert NULL zu.
  2. Gibt den Wert der Zeigervariablen โ€žipโ€œ zusammen mit etwas Text auf der Konsole aus.
  3. Das Programm muss bei erfolgreichem Abschluss einen Wert zurรผckgeben.
  4. Ende des Hauptteils der main()-Funktion.

Zeiger von Variablen

Mit C++kรถnnen Sie Daten direkt aus dem Speicher des Computers bearbeiten.

Der Speicherplatz kann nach Belieben zugewiesen oder neu zugewiesen werden. Dies wird durch Pointer-Variablen ermรถglicht.

Zeigervariablen verweisen auf eine bestimmte Adresse im Speicher des Computers, auf die eine andere Variable verweist.

Es kann wie folgt deklariert werden:

int *p;

Oder,

int* p;

Im you-Beispiel haben wir die Zeigervariable p deklariert.

Es enthรคlt eine Speicheradresse.

Das Sternchen ist der Dereferenzierungsoperator, der einen Zeiger auf bezeichnet.

Der Zeiger p zeigt auf einen ganzzahligen Wert in der Speicheradresse.

Beispiel 4:

#include <iostream>

using namespace std;
int main() {
	int *p, x = 30;
	p = &x;
	cout << "Value of x is: " << *p;
	return 0;
}

Ausgang:

Zeiger von Variablen

Hier ist ein Screenshot des Codes:

Zeiger von Variablen

Code Erlรคuterung:

  1. Deklarieren Sie eine Zeigervariable p und eine Variable x mit dem Wert 30.
  2. Weisen Sie p die Adresse der Variablen x zu.
  3. Geben Sie den Wert der Zeigervariablen p zusammen mit etwas Text auf der Konsole aus.
  4. Das Programm muss bei erfolgreichem Abschluss einen Wert zurรผckgeben.
  5. Ende des Hauptteils der main()-Funktion.

Anwendung von Zeigern

Funktionen in C++ kann nur einen Wert zurรผckgeben. AuรŸerdem werden alle in einer Funktion deklarierten Variablen auf dem Funktionsaufrufstapel zugewiesen. Sobald die Funktion zurรผckkehrt, werden alle Stapelvariablen zerstรถrt.

Argumente an Funktionen werden als Wert รผbergeben, und jede ร„nderung an den Variablen รคndert nicht den Wert der tatsรคchlich รผbergebenen Variablen. Das folgende Beispiel veranschaulicht dieses Konzept:

Beispiel 5:

#include <iostream>

using namespace std;
void test(int*, int*);
int main() {
	int a = 5, b = 5;
	cout << "Before changing:" << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	test(&a, &b);

	cout << "\nAfter changing" << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	return 0;
}

void test(int* n1, int* n2) {
	*n1 = 10;
	*n2 = 11;
}

Ausgang:

Anwendung von Zeigern

Hier ist ein Screenshot des Codes:

Anwendung von Zeigern

Code Erlรคuterung:

  1. Erstellen Sie einen Prototyp einer Funktion namens test, die zwei ganzzahlige Parameter akzeptiert.
  2. Rufen Sie die Funktion main() auf. Wir werden die Programmlogik in seinen Kรถrper einfรผgen.
  3. Deklarieren Sie zwei ganzzahlige Variablen a und b mit jeweils dem Wert 5.
  4. Drucken Sie einen Text auf der Konsole. Mit endl (Endzeile) wird der Cursor bewegt, um mit dem Drucken in der nรคchsten Zeile zu beginnen.
  5. Geben Sie den Wert der Variablen a zusammen mit anderem Text auf der Konsole aus. Mit endl (Endzeile) wird der Cursor bewegt, um mit dem Drucken in der nรคchsten Zeile zu beginnen.
  6. Geben Sie den Wert der Variablen b zusammen mit anderem Text auf der Konsole aus. Mit endl (Endzeile) wird der Cursor bewegt, um mit dem Drucken in der nรคchsten Zeile zu beginnen.
  7. Erstellen Sie eine Funktion namens test(), die die Adressen der Variablen a und b als Parameter รผbernimmt.
  8. Drucken Sie einen Text auf der Konsole. Das \n erstellt eine neue Leerzeile, bevor der Text gedruckt wird. Mit endl (Endzeile) wird der Cursor bewegt, um in der nรคchsten Zeile nach dem Drucken des Textes mit dem Drucken zu beginnen.
  9. Geben Sie den Wert der Variablen a zusammen mit anderem Text auf der Konsole aus. Mit endl (Endzeile) wird der Cursor bewegt, um mit dem Drucken in der nรคchsten Zeile zu beginnen.
  10. Geben Sie den Wert der Variablen b zusammen mit anderem Text auf der Konsole aus. Mit endl (Endzeile) wird der Cursor bewegt, um mit dem Drucken in der nรคchsten Zeile zu beginnen.
  11. Das Programm muss bei erfolgreichem Abschluss einen Wert zurรผckgeben.
  12. Ende des Hauptteils der main()-Funktion.
  13. Definieren der Funktion test(). Die Funktion sollte zwei ganzzahlige Zeigervariablen *n1 und *n2 annehmen.
  14. Weisen Sie der Zeigervariablen *n1 den Wert 10 zu.
  15. Weisen Sie der Zeigervariablen *n2 den Wert 11 zu.
  16. Ende des Hauptteils der Funktion test().

Obwohl den Variablen a und b innerhalb des Funktionstests neue Werte zugewiesen werden, werden diese nach Abschluss des Funktionsaufrufs nicht in der รคuรŸeren Funktion main widergespiegelt.

Die Verwendung von Zeigern als Funktionsargumente hilft dabei, die tatsรคchliche Adresse der Variablen in der Funktion zu รผbergeben, und alle an der Variablen vorgenommenen ร„nderungen werden in der รคuรŸeren Funktion widergespiegelt.

Im obigen Fall hat die Funktion โ€žtestโ€œ die Adresse der Variablen โ€žaโ€œ und โ€žbโ€œ. Auf diese beiden Variablen kann direkt รผber die Funktion โ€žtestโ€œ zugegriffen werden, und daher werden alle an diesen Variablen vorgenommenen ร„nderungen in der aufrufenden Funktion โ€žmainโ€œ widergespiegelt.

Vorteile der Verwendung von Zeigern

Hier sind die Vorteile/Vorteile der Verwendung von Zeigern aufgefรผhrt

  • Zeiger sind Variablen, die die Adresse anderer speichern Variablen in C++.
  • Mithilfe von Zeigern kann eine Funktion mehrere Variablen รคndern und zurรผckgeben.
  • Speicher kann mithilfe von Zeigern dynamisch zugewiesen und freigegeben werden.
  • Zeiger helfen dabei, die Komplexitรคt des Programms zu vereinfachen.
  • Die Ausfรผhrungsgeschwindigkeit eines Programms verbessert sich durch die Verwendung von Zeigern.

Zusammenfassung

  • Ein Zeiger bezieht sich auf eine Variable, die die Adresse einer anderen Variablen enthรคlt.
  • Jeder Zeiger hat einen gรผltigen Datentyp.
  • Ein Zeiger ist eine symbolische Darstellung einer Speicheradresse.
  • Zeiger ermรถglichen es Programmen, Call-by-Reference zu simulieren und dynamische Datenstrukturen zu erstellen und zu manipulieren.
  • Arrays und Zeiger verwenden ein verwandtes Konzept.
  • Der Array-Name bezeichnet die Basis des Arrays.
  • Wenn Sie die Adresse eines Arrays einem Zeiger zuweisen mรถchten, verwenden Sie kein kaufmรคnnisches Und (&).
  • Wenn es keine spezifische Adresse zum Zuweisen einer Zeigervariablen gibt, weisen Sie ihr einen NULL-Wert zu.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: