C++-osoitinaritmetiikka

C Osoitinaritmetiikka



Tämä artikkeli käsittelee osoitinaritmetiikkaa C++:ssa. Osoittimet ovat muuttujia, jotka tallentavat tietojen muistiosoitteen. Osoitinaritmetiikka on voimakas tunnusmerkki C++-ohjelmointikielen maailmassa, jonka avulla voimme käsitellä erilaisia ​​aritmeettisia operaatioita, joissa yhteen-, kerto-, jakolasku-, lisäys-, dekrementointi- ja vähennyslasku sisältää osoittimen uuden muistiosoitteen kehittämiseksi muistipuskureissamme. . Osoitinaritmetiikka luo helposti dynaamisen muistin varauksen. Tässä C++-artikkelissa opimme käsittelemään muistiosoitetta eri tavoilla osoittimien avulla ja tarjoamme asianmukaisia ​​ohjeita ja esimerkkejä.

Skenaario 1: Osoitin suorittaa lisäys- ja vähennystoiminnot

Täällä opimme osoittimen käsittelystä erilaisten muistiosoitteiden tuottamiseksi, joilla on eri tarkoitus. Kasvavat ja vähentävät osoittimet ovat myös vipuvaikutusosoittimien aritmetiikkaa, jotka lisäävät tai pienentävät osoitetta kertoimella yksi kerrottuna sen tietotyypin koolla, johon ne osoittavat. Tähän skenaarioon liittyvä koodinpätkä on liitteenä seuraavassa:







#include
käyttäen nimiavaruutta std;
const int Arr_Max = 5 ;
int main ( ) {
int missä [ Arr_Max ] = { kaksikymmentä , 150 , 270 } ;
int * ptr; // julistaa osoitin
ptr = var;
varten ( int i = 0 ; i < Arr_Max; i++ ) {
std::cout << 'Elementin muistiosoite on: [' << i << '] = ' ;
std::cout << ptr << endl;
cout << 'Arvo osoitteeseen on [' << i << '] = ' ;
cout << * ptr << endl;
std::cout << 'osoittimen lisäys onnistui' << endl;
ptr++;
}
std::cout << 'Osoittimen osoite ennen vähennystä' << ptr << endl;
ptr--;
std::cout << 'Osoittimen osoite vähennyksen jälkeen' << ptr << endl;
palata 0 ;
}


Tässä määritämme vaaditun kirjaston koodissa heti alussa: ' '. Määrittelemme muistin varauksen muistitilan varaamiseksi, joka on 'Arr_Max=5'. Päätoiminnossa alustamme taulukon ja välitämme muistin koon tälle taulukolle. Seuraavaksi 'ptr'-osoittimen ilmoitus tarvitaan myös osoittamaan muistissa oleva muistiosoite.



Välitämme taulukon osoittimelle päästäksemme osoitteeseen. Kuten me kaikki tiedämme, taulukot sisältävät aina useita kohteita eri paikoissa. Joten tarvitsimme silmukan 'help'-osoittimella päästäksemme jokaiseen taulukon elementtiin. Joka kerta kun silmukka suoritetaan, saamme muistin osoitteen ja arvot tätä osoitetta vastaan ​​osoittimen aritmeettisen 'ptr++' inkrementtioperaattorin avulla, joka siirtää muistiosoitteen muistin seuraavaan osoitteeseen. Silmukan suoritusjakso riippuu taulukon koosta. Silmukan ulkopuolella haluamme palauttaa osoittimen edelliseen muistiosoitteeseen käyttämällä 'ptr--' -vähennysosoitinta .



Suorita tämä koodi napsauttamalla Execute>Compile & Run -vaihtoehtoa ja saat seuraavan tulosteen:






Toivottavasti tämä tulos on helppo ymmärtää. Muistin osoite ja arvo muuttuvat. Osoittimen siirtäminen yhdestä paikasta on mahdollista vain lisäysosoittimen aritmetiikasta C++:ssa.

Skenaario 2: Kahden osoittimen vähentäminen C++:ssa

Tässä skenaariossa opimme vähentämään kaksi tai useampia osoittimia C++:ssa. Kaikki aritmeettiset operaatiot, joissa vähennys tulee, ovat elintärkeitä prosesseja, koska voimme vähentää vain kaksi osoitinta samanaikaisesti, jos ja vain jos niillä on sama tietotyyppi.



Muut toiminnot, kuten yhteen-, kerto- ja jakolasku, eivät ole mahdollisia osoittimessa, koska niillä ei ole mitään järkeä muistiosoitteessa. Koodinpätkä on liitteenä seuraavassa:

#include
int main ( ) {
Hän viittoi [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
int * ptrr1 = & Sille [ 3 ] ; // Osoitin kolmanteen elementtiin ( 42 )
int * ptrr2 = & Sille [ 6 ] ; // Osoitin kuudenteen elementtiin ( 89 )
ptrdiff_t ptrvähentää = ptrr2 - ptrr1;

std::cout << 'Näiden osoitteiden välinen ero on: ' << ptrvähentää << 'elementtejä' << std::endl;
palata 0 ;
}


Vähennysoperaatio on C++:n muistiosoitteen välisen eron löytäminen. Pääfunktiossa otamme taulukon, joka sisältää eri arvoja eri indekseissä. Taulukossa jokaisella indeksillä on eri muistipaikka. Voimme löytää eron kahden osoittimen välillä vain osoittimen aritmetiikkaa käyttämällä. Tässä käytetään erityistä osoitintyyppiä 'ptrdiff_t', jota on käytettävä kahden tai useamman osoittimen välisten erojen löytämiseen C++:ssa.

Tämän koodin tulos on liitetty seuraavaan:


Näiden osoitteiden välinen ero on elementin ruuvipenkki, joka on 3.

Skenaario 3: Vertaa kahta tai useampaa osoitinta C++:ssa

Tässä skenaariossa opimme vertailemaan eri osoittimia C++:ssa käyttämällä erilaisia ​​relaatiooperaattoreita, kuten '==', '<=', '>=', '<', '>'. Voimme verrata osoittimia vain, jos ne osoittavat saman taulukon elementtien osoitteisiin. Muista, että kahden erityyppisen osoittimen vertaaminen voi aiheuttaa määrittelemätöntä toimintaa. Osoittimen vertailuun liittyvä koodinpätkä mainitaan seuraavassa:

#include
käyttäen nimiavaruutta std;
int main ( )
{
int arr1 [ 10 ] = { 4 , 7 , 9 , yksitoista , 14 , 16 , 18 , kaksikymmentä , 22 , 25 } ;
int * ptr1 = & arr1 [ 3 ] ;
int * ptr2 = & arr1 [ 6 ] ;
int * ptr3 = & arr1 [ 8 ] ;
int * ptr4 = & arr1 [ 9 ] ;
jos ( ptr1 ==ptr2 )
{
std::cout << 'osoittimet ovat samat' << endl;
}
muu jos ( ptr3 < =ptr4 )
{
std::cout << 'ptr3 on pienempi tai yhtä suuri kuin ptr4' << endl ;;
}
muu
{
std::cout << 'osoittimia ei verrata missään vaiheessa' << endl;
}
palata 0 ;
}


Tässä otamme taulukon, jossa on 10 elementtiä. Ilmoitamme neljä osoitinta, jotka osoittavat taulukon eri indeksiin. Sen jälkeen vertaamme näitä neljää osoitinta eri olosuhteissa, kuten annetusta koodista näkyy. Tarkista 'jos'-tilassa, onko 'ptr1'-osoitin yhtä suuri kuin 'ptr2'-osoitin, ja tulosta sitten 'osoittimet ovat yhtä suuret'. Kun meillä on useita ehtoja, joissa käytämme 'else if' -ehtoa tarkistaaksemme, onko 'ptr3'-osoitin pienempi kuin 'ptr4'-osoitin. Napsauta kaiken tämän jälkeen Suorita > Compile & Run vaihtoehto.

Tämän koodin tulos on liitetty seuraavaan:


Se näyttää kelvollisen ehdon konsolin näytöllä ja poistuu käännöksestä. 'ptr3'-osoitin sisältää arvon, joka on pienempi tai yhtä suuri kuin 'ptr4'-osoittimen arvo.

Skenaario 4: Näytä pariton luku osoitinaritmetiikalla

Täällä näemme, kuinka voimme dynaamisesti varata muistin kokonaisluvun joukolle. Tähän tapaukseen liittyvä koodinpätkä on annettu seuraavassa:

#include
int main ( ) {
int numerot [ ] = { 1 , 12 , 33 , 24 , viisitoista , 776 , 71 , 18 , 29 , viisikymmentä } ;
int * ptrr = numerot;
std::cout << 'Parittomat numerot taulukoissa:' ;
varten ( int i = 0 ; i < 10 ; ++i ) {
jos ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << ' ' ;
}
ptrr++;
}
std::cout << std::endl;
palata 0 ;
}


Pääfunktiossa otamme taulukon, joka sisältää 10 elementtiä. Tarvitsemme osoittimen, joka osoittaa kaikki taulukon elementit tarkistaaksemme taulukon parittoman luvun. Tarkista 'for'-silmukassa pariton luku jakamalla taulukon nykyinen elementti. Osoitinlaskuria kasvatetaan yhden taulukon elementin tarkistamisen jälkeen.

Koodin suorittamisen jälkeen tulos näytetään konsolin näytöllä, joka on annettu seuraavassa:


Tällä tavalla voimme näyttää parittomat luvut käyttämällä osoitinaritmetiikkaa konsolin näytöllä.

Johtopäätös

Päättelemme tässä, että osoitinaritmetiikka on tehokkain työkalu, joka suorittaa erilaisia ​​​​toimintoja C++:ssa. Varmista, että osoitin kasvattaa tai pienentää taulukon arvoa, jolla on sama tietotyyppi. Voimme verrata taulukon arvoja niiden muistiosoitteiden perusteella C++-ohjelmointikielen osoitinaritmetiikkaa käyttämällä. Voimme kulkea taulukon läpi ja hallita muistia helposti osoitinaritmetiikan avulla.