Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++-Zeiger und Arrays

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, ptr ist eine Zeigervariable, während arr ist ein int Reihe. Der Code ptr = arr; speichert die Adresse des ersten Elements des Arrays in der Variablen ptr .

Beachten Sie, dass wir arr verwendet haben statt &arr[0] . Dies liegt daran, dass beide gleich sind. Der Code unten ist also derselbe wie der Code oben.

int *ptr;
int arr[5];
ptr = &arr[0];

Die Adressen für die restlichen Array-Elemente werden durch &arr[1] angegeben , &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 .

Hier, wenn ptr zeigt auf das erste Element im obigen Beispiel, dann ptr + 3 zeigt auf das vierte Element. Zum Beispiel

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. Zum Beispiel

// 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]; initialisiert dann

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];

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

Ebenso, wenn der Zeiger ptr zeigt auf char type data, dann die Adresse zwischen ptr und ptr + 1 ist 1 Byte. Das 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 <iostream>
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<<"\nDisplaying 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

Displaying address using arrays: 
&arr[0] = 0x61fef0
&arr[1] = 0x61fef4
&arr[2] = 0x61fef8

Displaying address using pointers: 
ptr + 0 = 0x61fef0
ptr + 1 = 0x61fef4
ptr + 2 = 0x61fef8

Im obigen Programm haben wir zunächst einfach die Adressen der Array-Elemente ausgegeben, ohne die Zeigervariable ptr zu verwenden .

Dann haben wir den Zeiger ptr verwendet auf die Adresse von a[0] zeigen , ptr + 1 auf die Adresse von a[1] zeigen , und so weiter.


In den meisten Kontexten zerfallen Array-Namen zu Zeigern. In einfachen Worten, Array-Namen werden in Zeiger umgewandelt. 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 dasselbe sind.

Es gibt einige Fälle, in denen Array-Namen nicht in Zeiger zerfallen. Um mehr zu erfahren, besuchen Sie:Wann zerfällt der Array-Name nicht in einen Zeiger?


Beispiel 2:Arrayname als Zeiger verwendet

// C++ Program to insert and display data entered by using pointer notation.

#include <iostream>
using namespace std;

int main() {
    float arr[5];
    
   // Insert data using pointer notation
    cout << "Enter 5 numbers: ";
    for (int i = 0; i < 5; ++i) {

        // store input number in arr[i]
        cin >> *(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

Enter 5 numbers: 2.5
3.5
4.5
5
2
Displaying data: 
2.5
3.5
4.5
5
2

Hier,

  1. Wir haben zuerst die Zeigernotation verwendet, um die vom Benutzer eingegebenen Zahlen in das 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 verwenden für die Pointer-Notation.

    Wie wir bereits wissen, ist der Array-Name arr zeigt auf das erste Element des Arrays. Wir können also an arr denken wie ein Zeiger.

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

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

    Dieser Code entspricht

    cout << arr[i] << endl ;

C Sprache

  1. C++-Variablen, Literale und Konstanten
  2. C++-Klassen und -Objekte
  3. C++-Speicherverwaltung:neu und löschen
  4. Öffentliche, geschützte und private Vererbung in C++
  5. C++ Friend-Funktion und Friend-Klassen
  6. C-Zeiger
  7. Beziehung zwischen Arrays und Zeigern
  8. C Übergeben Sie Adressen und Zeiger
  9. C-Strukturen und Zeiger
  10. Strukturen und Klassen in C++