C++ osuti aritmeetika

C Osuti Aritmeetika



See artikkel käsitleb kursori aritmeetikat C++ keeles. Osutajad on muutujad, mis salvestavad andmete mäluaadressi. Osuti aritmeetika on C++ programmeerimiskeele maailmas võimas tunnus, mis võimaldab meil tegeleda erinevate aritmeetiliste operatsioonidega, mille puhul liitmine, korrutamine, jagamine, suurendamine, vähendamine ja lahutamine hõlmavad kursorit uue mäluaadressi väljatöötamiseks meie mälupuhvrites. . Osuti aritmeetika loob hõlpsalt dünaamilise mälujaotuse. Selles C++ artiklis õpime, kuidas viidate abil mäluaadressiga erineval viisil manipuleerida ning pakume õigeid juhiseid ja näiteid.

1. stsenaarium: kursor sooritab suurendamise ja vähendamise toimingud

Siin õpime kursori manipuleerimise kohta erinevate mäluaadresside loomiseks, millel on erinevad eesmärgid. Kasvavad ja kahandavad osutid on ka võimenduse osutite aritmeetika, mis suurendavad või vähendavad aadressi ühe teguri võrra, mis on korrutatud selle andmetüübi suurusega, millele nad osutavad. Selle stsenaariumiga seotud koodilõik on lisatud järgmiselt.







#include
kasutades nimeruumi std;
const int Arr_Max = 5 ;
int main ( ) {
int  kus [ Arr_Max ] = { kakskümmend , 150 , 270 } ;
int * ptr; // kuulutama osuti
ptr = var;
jaoks ( int i = 0 ; i < Arr_Max; i++ ) {
std::cout << 'Elemendi mäluaadress on: [' << i << '] = ' ;
std::cout << ptr << endl;
cout << 'Väärtus aadressi suhtes on [' << i << '] = ' ;
cout << * ptr << endl;
std::cout << 'osuti suurendamine õnnestus' << endl;
ptr++;
}
std::cout << 'Osuti aadress enne vähendamist' << ptr << endl;
ptr--;
std::cout << 'Osuti aadress pärast vähendamist' << ptr << endl;
tagasi 0 ;
}


Siin määratleme koodis nõutava teegi kohe alguses: “ ”. Mälus ruumi reserveerimiseks määratleme mälujaotuse, mis on 'Arr_Max=5'. Põhifunktsioonis initsialiseerime massiivi ja edastame sellele massiivile mälumahu. Järgmisena on vaja ka 'ptr' osuti deklaratsiooni, et osutada mälus olevale mäluaadressile.



Aadressile juurdepääsu saamiseks edastame massiivi kursorile. Nagu me kõik teame, sisaldavad massiivid alati mitut üksust erinevates asukohtades. Niisiis vajasime massiivi igale elemendile juurdepääsuks tsüklit 'abi' osutiga. Iga kord, kui silmus käivitub, saame selle aadressi vastu mäluaadressi ja väärtused, kasutades kursori aritmeetikat “ptr++” juurdekasvuoperaatorit, mis nihutab mäluaadressi mälu järgmisele aadressile. Silmuse täitmistsükkel sõltub massiivi suurusest. Väljaspool tsüklit tahame viia kursor tagasi eelmisele mäluaadressile, kasutades lihtsalt kahandamiskursorit “ptr--”.



Käivitage see kood, klõpsates suvandit Käivita> Kompileeri ja käivita ning saate järgmise väljundi:






Loodetavasti on seda väljundit lihtne mõista. Mälu aadressi ja väärtust muudetakse. Kursori nihutamine ühest asukohast on võimalik ainult C++-i juurdekasvukursori aritmeetika abil.

2. stsenaarium: kahe osuti lahutamine keeles C++

Selles stsenaariumis õpime, kuidas lahutada kaks või enam osutit C++-s. Kõik aritmeetilised toimingud, mille puhul lahutamine toimub, on elutähtsad protsessid, kuna saame korraga lahutada kaks osutit siis ja ainult siis, kui neil on sama andmetüüp.



Muud toimingud, nagu liitmine, korrutamine ja jagamine, pole kursoris võimalikud, kuna neil pole mäluaadressimisel mõtet. Koodilõik on lisatud järgmiselt:

#include
int main ( ) {
Ta viipab [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
int * ptrr1 = & Sellele [ 3 ] ; // Osutage kolmandale elemendile ( 42 )
int * ptrr2 = & Sellele [ 6 ] ; // Osuti kuuendale elemendile ( 89 )
ptrdiff_t ptrlahutama = ptrr2 - ptrr1;

std::cout << 'Erinevus nende aadresside vahel on:' << ptrlahutama << 'elemendid' << std::endl;
tagasi 0 ;
}


Lahutamisoperatsioon on C++ mäluaadressi erinevuse leidmine. Põhifunktsioonis võtame massiivi, mis sisaldab erinevatel indeksitel erinevaid väärtusi. Massiivis on igal indeksil erinev mälukoht. Kahe osuti erinevuse saame leida ainult osuti aritmeetika abil. Siin kasutame spetsiaalset osutitüüpi “ptrdiff_t”, mida tuleb kasutada C++ kahe või enama osuti erinevuste leidmiseks.

Selle koodi väljund on lisatud järgmisele:


Erinevus nende aadresside vahel on elemendi kruustang, mis on 3.

Stsenaarium 3: võrrelge kahte või enamat osutit C++-s

Selles stsenaariumis õpime, kuidas võrrelda C++ erinevaid viiteid, kasutades erinevaid relatsioonioperaatoreid, nagu '==', '<=', '>=', '<', '>'. Osujaid saame võrrelda ainult siis, kui need osutavad sama massiivi elementide aadressile. Pidage meeles, et kahe erinevat tüüpi osuti võrdlemine võib põhjustada ebamäärast käitumist. Koodilõiku, mis on seotud osuti võrdlusega, mainitakse järgmises:

#include
kasutades nimeruumi std;
int main ( )
{
int arr1 [ 10 ] = { 4 , 7 , 9 , üksteist , 14 , 16 , 18 , kakskümmend , 22 , 25 } ;
int * ptr1 = & arr1 [ 3 ] ;
int * ptr2 = & arr1 [ 6 ] ;
int * ptr3 = & arr1 [ 8 ] ;
int * ptr4 = & arr1 [ 9 ] ;
kui ( ptr1 ==ptr2 )
{
std::cout << 'osutajad on võrdsed' << endl;
}
muidu kui ( ptr3 < =ptr4 )
{
std::cout << 'ptr3 on väiksem kui ptr4 või sellega võrdne' << endl ;;
}
muidu
{
std::cout << 'näiteid ei võrrelda üheski etapis' << endl;
}
tagasi 0 ;
}


Siin võtame 10 elemendiga massiivi. Deklareerime neli osutit, mis osutavad massiivi teisele indeksile. Pärast seda võrdleme neid nelja osutit erinevatel tingimustel, nagu antud koodis näha. Tingimuses 'kui' kontrollige, kas osuti 'ptr1' on võrdne 'ptr2' osutiga, ja seejärel printige 'osutajad on võrdsed'. Kui meil on mitu tingimust, mille puhul kasutame tingimust „else if”, et kontrollida, kas „ptr3” osuti on väiksem kui osuti „ptr4”. Pärast kõike seda klõpsake nuppu Käivita > Kompileerimine ja käivitamine valik.

Selle koodi väljund on lisatud järgmisele:


See kuvab konsooliekraanil kehtiva tingimuse ja väljub kompileerimisest. Osuti „ptr3” sisaldab väärtust, mis on väiksem või võrdne osuti „ptr4” osutamise väärtusega.

4. stsenaarium: paaritu numbri kuvamine osuti aritmeetika abil

Siin näeme, kuidas saame dünaamiliselt eraldada mälu täisarvu massiivi jaoks. Selle juhtumiga seotud koodilõik on esitatud järgmiselt:

#include
int main ( ) {
int numbrid [ ] = { 1 , 12 , 33 , 24 , viisteist , 776 , 71 , 18 , 29 , viiskümmend } ;
int * ptrr = numbrid;
std::cout << 'Paaritud numbrid massiivides:' ;
jaoks ( int i = 0 ; i < 10 ; ++i ) {
kui ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << ' ' ;
}
ptrr++;
}
std::cout << std::endl;
tagasi 0 ;
}


Põhifunktsioonis võtame massiivi, mis sisaldab 10 elementi. Massiivi paaritu arvu kontrollimiseks vajame osutit, mis osutab kõigile massiivi elementidele. Kontrollige tsüklis 'for' paaritu arvu, jagades massiivi praeguse elemendi. Kursori loendurit suurendatakse pärast massiivi ühe elemendi kontrollimist.

Pärast koodi käivitamist kuvatakse väljund konsooliekraanil, mis on esitatud järgmiselt:


Nii saame kuvada paarituid numbreid, kasutades konsooliekraanil kursori aritmeetikat.

Järeldus

Siit järeldame, et osuti aritmeetika on kõige tõhusam tööriist C++ erinevate toimingute sooritamiseks. Veenduge, et kursor suurendab või vähendab sama andmetüübiga massiivi väärtust. Massiivi väärtusi saame võrrelda nende mäluaadresside järgi C++ programmeerimiskeele osuti aritmeetika abil. Osuti aritmeetika abil saame massiivi läbida ja mälu hõlpsalt hallata.