Aritmetica pointerului C++

Aritmetica Pointerului C



Acest articol este despre aritmetica pointerului în C++. Pointerii sunt variabile care stochează adresa de memorie a datelor. Aritmetica pointerului este un semn distinctiv puternic în lumea limbajului de programare C++, care ne permite să ne ocupăm de diferite operații aritmetice în care adunarea, înmulțirea, împărțirea, creșterea, decrementarea și scăderea implică un pointer pentru a dezvolta noua adresă de memorie în bufferele noastre de memorie. . O aritmetică pointer creează cu ușurință alocarea memoriei dinamice. În acest articol C++, vom învăța cum să manipulăm adresa de memorie în diferite moduri cu ajutorul indicatorilor și vom oferi instrucțiuni și exemple adecvate.

Scenariul 1: Pointerul efectuează operațiunile de creștere și scădere

Aici, vom afla despre manipularea pointerului pentru a produce adrese de memorie diferite care au scopuri diferite. Indicatorii de creștere și de decrementare sunt, de asemenea, indicatori de pârghie care măresc sau descresc adresa cu un factor de unu înmulțit cu dimensiunea tipului de date către care indică. Fragmentul de cod legat de acest scenariu este atașat în următoarele:







#include
folosind namespace std;
const int Arr_Max = 5 ;
int principal ( ) {
int  unde [ Arr_Max ] = { douăzeci , 150 , 270 } ;
int * ptr; // declara indicator
ptr = var;
pentru ( int i = 0 ; i < Arr_Max; i++ ) {
std::cout << „Adresa de memorie a elementului este: [” << i << '] = ' ;
std::cout << ptr << endl;
cout << „Valoarea față de adresa este [” << i << '] = ' ;
cout << * ptr << endl;
std::cout << 'indicatorul a crescut cu succes' << endl;
ptr++;
}
std::cout << „Adresa indicatorului înainte de decrement” << ptr << endl;
ptr--;
std::cout << „Adresa indicatorului după decrement” << ptr << endl;
întoarcere 0 ;
}


Aici, definim o bibliotecă necesară în cod chiar de la început: „ ”. Definim o alocare de memorie pentru rezervarea spațiului din memorie care este „Arr_Max=5”. În funcția principală, inițializam matricea și trecem dimensiunea memoriei acelei matrice. Apoi, declarația pointerului „ptr” este, de asemenea, necesară pentru a indica adresa de memorie din memorie.



Trecem tabloul către pointer pentru a accesa adresa. După cum știm cu toții, matricele conțin întotdeauna mai multe elemente în locații diferite. Deci, aveam nevoie de o buclă cu pointerul „ajutor” pentru a accesa fiecare element al unui tablou. De fiecare dată când se execută bucla, obținem adresa de memorie și valorile față de această adresă cu ajutorul operatorului de increment aritmetic pointer „ptr++” care mută adresa de memorie la următoarea adresă a memoriei. Ciclul de execuție al buclei depinde de dimensiunea unui tablou. În afara buclei, vrem să aducem indicatorul înapoi la adresa anterioară de memorie folosind doar indicatorul de decrement „ptr- -”.



Executați acest cod făcând clic pe opțiunea Execute>Compile & Run și veți obține următorul rezultat:






Sperăm că această ieșire este ușor de înțeles. Adresa de memorie și valoarea sunt modificate. Deplasarea pointerului dintr-o locație este posibilă numai din aritmetica indicatorului de increment în C++.

Scenariul 2:  Scăderea a doi indicatori în C++

În acest scenariu, vom învăța cum să scădem doi sau mai mulți pointeri în C++. Toate operațiile aritmetice în care vine scăderea sunt procese vitale, deoarece nu putem scădea decât doi pointeri simultan dacă și numai dacă au același tip de date.



Celelalte operații precum adunarea, înmulțirea și împărțirea nu sunt posibile în indicator, deoarece nu au sens în adresarea în memorie. Fragmentul de cod este atașat în următoarele:

#include
int principal ( ) {
El face semn [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
int * ptrr1 = & La asta [ 3 ] ; // Indicator către al treilea element ( 42 )
int * ptrr2 = & La asta [ 6 ] ; // Indicator către al șaselea element ( 89 )
ptrdiff_t ptrsubtract = ptrr2 - ptrr1;

std::cout << 'Diferența dintre aceste adrese este: ' << ptrsubtract << 'elemente' << std::endl;
întoarcere 0 ;
}


Operația de scădere este găsirea diferenței dintre adresa de memorie în C++. În funcția principală, luăm o matrice care conține valori diferite la indici diferiți. Într-o matrice, fiecare index are o locație de memorie diferită. Diferența dintre doi indicatori o putem găsi doar cu ajutorul unei aritmetici a indicatorului. Aici, folosim un tip de pointer special „ptrdiff_t” care trebuie folosit pentru a găsi diferențele dintre doi sau mai mulți pointeri în C++.

Ieșirea acestui cod este atașată în următoarele:


Diferența dintre aceste adrese este prin menghină, care este 3.

Scenariul 3: Comparați doi sau mai mulți pointeri în C++

În acest scenariu, vom învăța cum să comparăm diferiții pointeri în C++ folosind diferiți operatori relaționali precum „==”, „<=”, „>=”, „<”, „>”. Putem compara pointerii doar dacă indică către adresa elementelor aceleiași matrice. Amintiți-vă că compararea a două indicatori cu tipuri diferite poate provoca un comportament nedefinit. Fragmentul de cod care este legat de compararea indicatorului este menționat în următoarele:

#include
folosind namespace std;
int principal ( )
{
int arr1 [ 10 ] = { 4 , 7 , 9 , unsprezece , 14 , 16 , 18 , douăzeci , 22 , 25 } ;
int * ptr1 = & arr1 [ 3 ] ;
int * ptr2 = & arr1 [ 6 ] ;
int * ptr3 = & arr1 [ 8 ] ;
int * ptr4 = & arr1 [ 9 ] ;
dacă ( ptr1 ==ptr2 )
{
std::cout << „indicatoarele sunt egale” << endl;
}
altfel dacă ( ptr3 < =ptr4 )
{
std::cout << „ptr3 este mai mic sau egal cu ptr4” << endl ;;
}
altfel
{
std::cout << „indicatorii nu sunt comparați în nicio etapă” << endl;
}
întoarcere 0 ;
}


Aici, luăm o matrice cu 10 elemente. Declarăm patru pointeri care indică un index diferit al matricei. După aceea, comparăm acești patru indicatori în condiții diferite, așa cum se vede în codul dat. În condiția „dacă”, verificați dacă indicatorul „ptr1” este egal cu indicatorul „ptr2”, apoi imprimați „indicatorii sunt egali”. Când avem mai multe condiții în care folosim condiția „else if” pentru a verifica dacă pointerul „ptr3” este mai mic decât egal cu indicatorul „ptr4”. După toate acestea, faceți clic pe Executați > Compilați și rulați opțiune.

Ieșirea acestui cod este atașată în următoarele:


Afișează o condiție validă pe ecranul consolei și iese din compilare. Pointerul „ptr3” conține o valoare care este mai mică sau egală cu valoarea de indicare a indicatorului „ptr4”.

Scenariul 4: Afișați un număr impar cu aritmetica pointerului

Aici, vom vedea cum putem aloca dinamic memoria pentru o matrice de un întreg. Fragmentul de cod legat de acest caz este prezentat în următoarele:

#include
int principal ( ) {
numere int [ ] = { 1 , 12 , 33 , 24 , cincisprezece , 776 , 71 , 18 , 29 , cincizeci } ;
int * ptrr = numere;
std::cout << 'Numere impare din matrice: ' ;
pentru ( int i = 0 ; i < 10 ; ++i ) {
dacă ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << ' ' ;
}
ptrr++;
}
std::cout << std::endl;
întoarcere 0 ;
}


În funcția principală, luăm o matrice care conține 10 elemente. Avem nevoie de un pointer care indică toate elementele din matrice pentru a verifica numărul impar din matrice. În bucla „for”, verificați numărul impar prin împărțirea elementului curent al unui tablou. Contorul pointerului este incrementat după verificarea unui element dintr-o matrice.

După executarea codului, rezultatul este afișat pe ecranul consolei, care este dat în următorul:


În acest fel, putem afișa numerele impare folosind aritmetica pointerului pe ecranul consolei.

Concluzie

Concluzionăm aici că aritmetica pointerului este cel mai eficient instrument care efectuează diferite operații în C++. Asigurați-vă că indicatorul crește sau descrește valoarea unui tablou care are același tip de date. Putem compara valorile unui tablou după adresele lor de memorie cu ajutorul aritmeticii pointerului în limbajul de programare C++. Putem parcurge matricea și gestiona memoria cu ușurință cu ajutorul aritmeticii pointerului.