C ++ - Zeiger und Arrays

In diesem Tutorial lernen wir anhand von Beispielen die Beziehung zwischen Arrays und Zeigern kennen.

In C ++ sind Zeiger Variablen, die Adressen anderer Variablen enthalten. Ein Zeiger kann nicht nur die Adresse einer einzelnen Variablen speichern, sondern auch die Adresse von Zellen eines Arrays.

Betrachten Sie dieses Beispiel:

 int *ptr; int arr(5); // store the address of the first // element of arr in ptr ptr = arr;

Hier ist ptr eine Zeigervariable, während arr ein intArray ist. Der Code ptr = arr;speichert die Adresse des ersten Elements des Arrays in der Variablen ptr.

Beachten Sie, dass wir verwendet haben , arrstatt &arr(0). Dies liegt daran, dass beide gleich sind. Der folgende Code ist also der gleiche wie der obige Code.

 int *ptr; int arr(5); ptr = &arr(0);

Die Adressen für den Rest der Feldelemente sind gegeben durch &arr(1), &arr(2), &arr(3)und &arr(4).

Zeigen Sie auf alle Array-Elemente

Angenommen, wir müssen mit demselben Zeiger ptr auf das vierte Element des Arrays zeigen.

Wenn ptr im obigen Beispiel auf das erste Element ptr + 3zeigt, zeigt es hier auf das vierte Element. Beispielsweise,

 int *ptr; int arr(5); ptr = arr; ptr + 1 is equivalent to &arr(1); ptr + 2 is equivalent to &arr(2); ptr + 3 is equivalent to &arr(3); ptr + 4 is equivalent to &arr(4);

Ebenso können wir mit dem einzelnen Zeiger auf die Elemente zugreifen. Beispielsweise,

 // use dereference operator *ptr == arr(0); *(ptr + 1) is equivalent to arr(1); *(ptr + 2) is equivalent to arr(2); *(ptr + 3) is equivalent to arr(3); *(ptr + 4) is equivalent to arr(4);

Angenommen, wir haben ptr = &arr(2);dann initialisiert

 ptr - 2 is equivalent to &arr(0); ptr - 1 is equivalent to &arr(1); ptr + 1 is equivalent to &arr(3); ptr + 2 is equivalent to &arr(4);
Arbeiten mit C ++ - Zeigern mit Arrays

Hinweis: Die Adresse zwischen ptr und ptr + 1 unterscheidet sich um 4 Byte. Dies liegt daran, dass ptr ein Zeiger auf intDaten ist. In einem 64-Bit-Betriebssystem beträgt die Größe von int 4 Byte.

Wenn der Zeiger ptr auf Typdaten zeigt, beträgt chardie Adresse zwischen ptr und ptr + 1 1 Byte. Dies liegt daran, dass die Größe eines Zeichens 1 Byte beträgt.

Beispiel 1: C ++ - Zeiger und Arrays

 // C++ Program to display address of each element of an array #include using namespace std; int main() ( float arr(3); // declare pointer variable float *ptr; cout << "Displaying address using arrays: " << endl; // use for loop to print addresses of all array elements for (int i = 0; i < 3; ++i) ( cout << "&arr(" << i << ") = " << &arr(i) << endl; ) // ptr = &arr(0) ptr = arr; cout<<"Displaying address using pointers: "<< endl; // use for loop to print addresses of all array elements // using pointer notation for (int i = 0; i < 3; ++i) ( cout << "ptr + " << i << " = "<< ptr + i << endl; ) return 0; )

Ausgabe

 Anzeigen der Adresse mithilfe von Arrays: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Anzeigen der Adresse mithilfe von Zeigern: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

Im obigen Programm haben wir zuerst einfach die Adressen der Array-Elemente gedruckt, ohne die Zeigervariable ptr zu verwenden.

Dann haben wir den Zeiger ptr verwendet, um auf die Adresse von a (0) ptr + 1zu zeigen, um auf die Adresse von a (1) zu zeigen und so weiter.

In den meisten Kontexten zerfallen Array-Namen in Zeiger. In einfachen Worten werden Array-Namen in Zeiger konvertiert. Aus diesem Grund können wir Zeiger verwenden, um auf Elemente von Arrays zuzugreifen.

Wir sollten uns jedoch daran erinnern, dass Zeiger und Arrays nicht identisch sind.

Es gibt einige Fälle, in denen Array-Namen nicht in Zeiger zerfallen. Weitere Informationen finden Sie unter: Wann zerfällt der Array-Name nicht in einen Zeiger?

Beispiel 2: Array-Name als Zeiger verwendet

 // C++ Program to insert and display data entered by using pointer notation. #include using namespace std; int main() ( float arr(5); // Insert data using pointer notation cout << "Enter 5 numbers: "; for (int i = 0; i > *(arr + i) ; ) // Display data using pointer notation cout << "Displaying data: " << endl; for (int i = 0; i < 5; ++i) ( // display value of arr(i) cout << *(arr + i) << endl ; ) return 0; )

Ausgabe

 Geben Sie 5 Zahlen ein: 2,5 3,5 4,5 5 2 Anzeigen von Daten: 2,5 3,5 4,5 5 2

Hier,

  1. Wir haben zuerst die Zeigernotation verwendet, um die vom Benutzer eingegebenen Zahlen im Array arr zu speichern.

     cin>> *(arr + i) ;

    Dieser Code entspricht dem folgenden Code:

     cin>> arr(i);

    Beachten Sie, dass wir keine separate Zeigervariable deklariert haben, sondern den Array-Namen arr für die Zeigernotation verwenden.

    Wie wir bereits wissen, zeigt der Arrayname arr auf das erste Element des Arrays. Wir können uns also vorstellen, dass arr wie ein Zeiger wirkt.

  2. In ähnlicher Weise haben wir dann eine forSchleife verwendet, um die Werte von arr unter Verwendung der Zeigernotation anzuzeigen.

     cout << *(arr + i) << endl ;

    Dieser Code entspricht

     cout << arr(i) << endl ;

Interessante Beiträge...