C++ Zeiger und Arrays: Die Beziehung meistern
C++ Zeiger und Arrays
In diesem Tutorial lernen Sie die Beziehung zwischen Arrays und Zeigern anhand von Beispielen kennen.
In C++ sind Zeiger Variablen, die Adressen anderer Variablen speichern. Ein Zeiger kann nicht nur die Adresse einer einzelnen Variable speichern, sondern auch die Adresse von Zellen eines Arrays.
Betrachten Sie dieses Beispiel:
int *ptr; int arr[5]; // Adresse des ersten // Elements von arr in ptr speichern ptr = arr;
Hier ist ptr eine Zeigervariable, während arr ein int-Array ist. Der Code ptr = arr; speichert die Adresse des ersten Elements des Arrays in der Variable ptr.
Beachten Sie, dass wir arr anstelle von &arr[0] verwendet haben. Dies liegt daran, dass beide identisch sind. Der folgende Code ist also derselbe wie der obige.
int *ptr; int arr[5]; ptr = &arr[0];
Die Adressen für die restlichen Arrayelemente werden durch &arr[1], &arr[2], &arr[3] und &arr[4] angegeben.
Auf alle Arrayelemente zeigen
Angenommen, wir müssen mit demselben Zeiger ptr auf das vierte Element des Arrays zeigen.
Hier zeigt ptr auf das erste Element im obigen Beispiel, dann wird ptr + 3 auf das vierte Element zeigen. Zum Beispiel:
int *ptr; int arr[5]; ptr = arr; ptr + 1 ist äquivalent zu &arr[1]; ptr + 2 ist äquivalent zu &arr[2]; ptr + 3 ist äquivalent zu &arr[3]; ptr + 4 ist äquivalent zu &arr[4];
Ähnlich können wir mit dem einzelnen Zeiger auf die Elemente zugreifen. Zum Beispiel:
// Dereferenzierungsoperator verwenden *ptr == arr[0]; *(ptr + 1) ist äquivalent zu arr[1]; *(ptr + 2) ist äquivalent zu arr[2]; *(ptr + 3) ist äquivalent zu arr[3]; *(ptr + 4) ist äquivalent zu arr[4];
Angenommen, wir haben ptr = &arr[2]; initialisiert, dann:
ptr - 2 ist äquivalent zu &arr[0]; ptr - 1 ist äquivalent zu &arr[1]; ptr + 1 ist äquivalent zu &arr[3]; ptr + 2 ist äquivalent zu &arr[4];

Hinweis: Die Adresse zwischen ptr und ptr + 1 unterscheidet sich um 4 Bytes. Das liegt daran, dass ptr ein Zeiger auf einen int-Datentyp ist. Und die Größe von int beträgt 4 Bytes in einem 64-Bit-Betriebssystem.
Ähnlich, wenn Zeiger ptr auf char-Typ-Daten zeigt, beträgt die Adresse zwischen ptr und ptr + 1 1 Byte. Das liegt daran, dass die Größe eines Zeichens 1 Byte beträgt.
Beispiel 1: C++ Zeiger und Arrays
// C++ Programm zur Anzeige der Adresse jedes Elements eines Arrays #include <iostream> using namespace std; int main() { float arr[3]; // Zeigervariable deklarieren float *ptr; cout << "Adressen mit Arrays anzeigen: " << endl; // for-Schleife zum Ausgeben der Adressen aller Arrayelemente for (int i = 0; i < 3; ++i) { cout << "&arr[" << i << "] = " << &arr[i] << endl; } // ptr = &arr[0] ptr = arr; cout<<"\nAdressen mit Zeigern anzeigen: "<< endl; // for-Schleife zum Ausgeben der Adressen aller Arrayelemente // mit Zeigernotation for (int i = 0; i < 3; ++i) { cout << "ptr + " << i << " = "<< ptr + i << endl; } return 0; }
Ausgabe
Adressen mit Arrays anzeigen: &arr[0] = 0x61fef0 &arr[1] = 0x61fef4 &arr[2] = 0x61fef8 Adressen mit Zeigern anzeigen: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8
Im obigen Programm haben wir zuerst einfach die Adressen der Arrayelemente ausgegeben, ohne die Zeigervariable ptr zu verwenden.
Dann haben wir den Zeiger ptr verwendet, um auf die Adresse von a[0] zu zeigen, ptr + 1 um auf die Adresse von a[1] zu zeigen, und so weiter.
In den meisten Kontexten degenerieren Arraynamen zu Zeigern. Einfach ausgedrückt, werden Arraynamen in Zeiger konvertiert. Deshalb können wir Zeiger verwenden, um auf Elemente von Arrays zuzugreifen.
Wir sollten uns jedoch merken, dass Zeiger und Arrays nicht dasselbe sind.
Es gibt einige Fälle, in denen Arraynamen nicht zu Zeigern degenerieren. Um mehr zu erfahren, besuchen Sie: Wann degeneriert der Arrayname nicht in einen Zeiger?
Beispiel 2: Arrayname als Zeiger verwendet
// C++ Programm zum Einfügen und Anzeigen von Daten mithilfe von Zeigernotation. #include <iostream> using namespace std; int main() { float arr[5]; // Daten mit Zeigernotation eingeben cout << "5 Zahlen eingeben: "; for (int i = 0; i < 5; ++i) { // Eingabezahlen in arr[i] speichern cin >> *(arr + i) ; } // Daten mit Zeigernotation anzeigen cout << "Daten anzeigen: " << endl; for (int i = 0; i < 5; ++i) { // Wert von arr[i] anzeigen cout << *(arr + i) << endl ; } return 0; }
Ausgabe
5 Zahlen eingeben: 2.5 3.5 4.5 5 2 Daten anzeigen: 2.5 3.5 4.5 5 2
Hier:
-
Wir haben zuerst die Zeigernotation verwendet, um die vom Benutzer eingegebenen Zahlen im Array arr zu speichern.
cin >> *(arr + i) ;Dieser Code ist äquivalent zum folgenden Code:
cin >> arr[i];Beachten Sie, dass wir keine separate Zeigervariable deklariert haben, sondern den Arraynamen arr für die Zeigernotation verwenden.
Wie wir bereits wissen, zeigt der Arrayname arr auf das erste Element des Arrays. Daher können wir arr als Zeiger betrachten.
-
Ebenso haben wir dann eine
for-Schleife verwendet, um die Werte von arr mit Zeigernotation anzuzeigen.cout << *(arr + i) << endl ;Dieser Code ist äquivalent zu
cout << arr[i] << endl ;
C Sprache
- C++-Variablen, Literale und Konstanten meistern: Ein umfassender Leitfaden
- C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
- C++ Speicherverwaltung meistern: Experten-Einsatz von new und delete
- C++ Vererbung: Public, Protected & Private erklärt
- C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
- C-Zeiger meistern: Praxisnahes Experten-Tutorial
- Beziehung zwischen Arrays und Zeigern in C verstehen
- C-Programmierung: Adressen & Zeiger an Funktionen übergeben – Praxisleitfaden
- C-Structs und Zeiger meistern: Praxisleitfaden
- C++ Structures vs. Classes: Praktischer Leitfaden für Embedded-Entwickler