Pointeri și matrice C ++

În acest tutorial, vom afla despre relația dintre tablouri și indicatori cu ajutorul exemplelor.

În C ++, indicatoarele sunt variabile care conțin adrese ale altor variabile. Pointerul nu numai că poate stoca adresa unei singure variabile, ci poate stoca și adresa celulelor unui tablou.

Luați în considerare acest exemplu:

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

Aici, ptr este o variabilă a indicatorului în timp ce arr este o intmatrice. Codul ptr = arr;stochează adresa primului element al tabloului în variabila ptr.

Observați că am folosit arrîn loc de &arr(0). Acest lucru se datorează faptului că ambele sunt la fel. Deci, codul de mai jos este același cu codul de mai sus.

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

Adresele pentru restul elementelor de matrice sunt date de &arr(1), &arr(2), &arr(3), și &arr(4).

Arată către fiecare element de matrice

Să presupunem că trebuie să indicăm cel de-al patrulea element al matricei folosind același indicator ptr.

Aici, dacă ptr indică primul element din exemplul de mai sus, atunci ptr + 3va indica al patrulea element. De exemplu,

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

În mod similar, putem accesa elementele folosind indicatorul unic. De exemplu,

 // 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);

Să presupunem că dacă am inițializat ptr = &arr(2);atunci

 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);
Lucrul indicatoarelor C ++ cu matrice

Notă: Adresa dintre ptr și ptr + 1 diferă cu 4 octeți. Acest lucru se datorează faptului că ptr este un indicator al unei intdate. Și, dimensiunea int este de 4 octeți într-un sistem de operare pe 64 de biți.

În mod similar, dacă indicatorul ptr indică chardatele de tip, atunci adresa dintre ptr și ptr + 1 este de 1 octet. Acest lucru se datorează faptului că dimensiunea unui caracter este de 1 octet.

Exemplul 1: indicatori și tablouri C ++

 // 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; )

Ieșire

 Afișarea adresei folosind tablouri: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Afișarea adresei folosind pointeri: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

În programul de mai sus, am imprimat mai întâi pur și simplu adresele elementelor matricei fără a utiliza variabila pointer ptr.

Apoi, am folosit indicatorul ptr pentru a indica adresa unui (0), ptr + 1pentru a indica adresa unui (1) și așa mai departe.

În majoritatea contextelor, numele matricilor se descompun în indicatori. În cuvinte simple, numele matricelor sunt convertite în indicatori. Acesta este motivul pentru care putem folosi indicii pentru a accesa elemente de matrice.

Cu toate acestea, ar trebui să ne amintim că indicii și matrice nu sunt la fel.

Există câteva cazuri în care numele matricilor nu se descompun în indicatori. Pentru a afla mai multe, vizitați: Când numele matricei nu se descompune într-un pointer?

Exemplul 2: numele matricei folosit ca indicator

 // 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; )

Ieșire

 Introduceți 5 numere: 2,5 3,5 4,5 5 2 Afișarea datelor: 2,5 3,5 4,5 5 2

Aici,

  1. Am folosit mai întâi notația indicatorului pentru a stoca numerele introduse de utilizator în matricea arr.

     cin>> *(arr + i) ;

    Acest cod este echivalent cu codul de mai jos:

     cin>> arr(i);

    Observați că nu am declarat o variabilă separată a indicatorului, ci folosim mai degrabă numele matricei arr pentru notația indicatorului.

    După cum știm deja, numele tabloului arr indică primul element al tabloului. Deci, ne putem gândi la ar ca acționând ca un indicator.

  2. În mod similar, am folosit apoi forbucla pentru a afișa valorile arr folosind notația pointer.

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

    Acest cod este echivalent cu

     cout << arr(i) << endl ;

Articole interesante...