C++ aritmetika pokazivača

C Aritmetika Pokazivaca



Ovaj članak govori o aritmetici pokazivača u C++. Pokazivači su varijable koje pohranjuju memorijsku adresu podataka. Aritmetika pokazivača snažno je obilježje u svijetu programskog jezika C++ koji nam omogućuje da se nosimo s različitim aritmetičkim operacijama u kojima zbrajanje, množenje, dijeljenje, povećanje, smanjenje i oduzimanje uključuju pokazivač za razvoj nove memorijske adrese u našim memorijskim međuspremnicima . Aritmetika pokazivača jednostavno stvara dinamičku dodjelu memorije. U ovom C++ članku naučit ćemo kako manipulirati memorijskom adresom na različite načine uz pomoć pokazivača i dati odgovarajuće smjernice i primjere.

Scenarij 1: Pokazivač izvodi operacije povećanja i smanjenja

Ovdje ćemo naučiti o manipulaciji pokazivačem kako bismo proizveli različite memorijske adrese koje imaju različite svrhe. Inkrementirajući i dekrementirajući pokazivači također su aritmetika pokazivača poluge koja povećava ili smanjuje adresu za faktor jedan pomnožen s veličinom tipa podataka na koji pokazuju. Isječak koda koji se odnosi na ovaj scenarij priložen je u nastavku:







#include
korištenje imenskog prostora std;
const int Arr_Max = 5 ;
int glavni ( ) {
int  gdje [ Arr_Max ] = { dvadeset , 150 , 270 } ;
int * ptr; // proglasiti pokazivač
ptr = var;
za ( int i = 0 ; ja < Arr_Max; i++ ) {
std::cout << 'Memorijska adresa elementa je: [' << ja << '] = ' ;
std::cout << ptr << endl;
cout << 'Vrijednost prema adresi je [' << ja << '] = ' ;
cout << * ptr << endl;
std::cout << 'pokazivač je uspješno povećan' << endl;
ptr++;
}
std::cout << 'Adresa pokazivača prije smanjenja' << ptr << endl;
ptr--;
std::cout << 'Adresa pokazivača nakon smanjenja' << ptr << endl;
povratak 0 ;
}


Ovdje definiramo potrebnu biblioteku u kodu na samom početku: “ ”. Definiramo dodjelu memorije kako bismo rezervirali prostor u memoriji koji je 'Arr_Max=5'. U glavnoj funkciji inicijaliziramo niz i prosljeđujemo mu veličinu memorije. Dalje, deklaracija pokazivača “ptr” također je potrebna za ukazivanje na memorijsku adresu u memoriji.



Prosljeđujemo niz do pokazivača za pristup adresi. Kao što svi znamo, nizovi uvijek sadrže više stavki na različitim lokacijama. Dakle, trebala nam je petlja s pokazivačem 'pomoć' za pristup svakom elementu niza. Svaki put kada se petlja izvrši, dobivamo memorijsku adresu i vrijednosti u odnosu na ovu adresu uz pomoć aritmetičkog operatora inkrementa pokazivača 'ptr++' koji pomiče memorijsku adresu na sljedeću adresu memorije. Ciklus izvođenja petlje ovisi o veličini niza. Izvan petlje, želimo vratiti pokazivač na prethodnu memorijsku adresu korištenjem pokazivača dekrementa “ptr- -”.



Izvršite ovaj kod tako što ćete kliknuti na opciju Execute>Compile & Run i dobit ćete sljedeći izlaz:






Nadamo se da je ovaj rezultat lako razumjeti. Memorijska adresa i vrijednost se mijenjaju. Pomicanje pokazivača s jednog mjesta moguće je samo iz aritmetike povećanja pokazivača u C++.

Scenarij 2:  Oduzimanje dva pokazivača u C++

U ovom scenariju naučit ćemo kako oduzeti dva ili više pokazivača u C++. Sve aritmetičke operacije u kojima dolazi do oduzimanja vitalni su procesi jer možemo oduzeti dva pokazivača istovremeno samo ako i samo ako imaju isti tip podataka.



Ostale operacije poput zbrajanja, množenja i dijeljenja nisu moguće u pokazivaču jer nemaju smisla u memorijskom adresiranju. Isječak koda je priložen u sljedećem:

#include
int glavni ( ) {
On poziva [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
int * ptrr1 = i Za to [ 3 ] ; // Pokazivač na treći element ( 42 )
int * ptrr2 = i Za to [ 6 ] ; // Pokazivač na šesti element ( 89 )
ptrdiff_t ptroduzeti = ptrr2 - ptrr1;

std::cout << 'Razlika između ovih adresa je: ' << ptroduzeti << ' elementi' << std::endl;
povratak 0 ;
}


Operacija oduzimanja je pronalaženje razlike između memorijske adrese u C++. U glavnoj funkciji uzimamo niz koji sadrži različite vrijednosti na različitim indeksima. U nizu svaki indeks ima različitu memorijsku lokaciju. Razliku između dva pokazivača možemo pronaći samo uz pomoć aritmetike pokazivača. Ovdje koristimo poseban tip pokazivača “ptrdiff_t” koji se mora koristiti za pronalaženje razlika između dva ili više pokazivača u C++.

Izlaz ovog koda je priložen u sljedećem:


Razlika između ovih adresa je po elementu vise koji je 3.

Scenarij 3: Usporedite dva ili više pokazivača u C++

U ovom scenariju naučit ćemo kako usporediti različite pokazivače u C++ koristeći različite relacijske operatore kao što su “==”, “<=”, “>=”, “<”, ”>”. Pokazivače možemo uspoređivati ​​samo ako pokazuju na adresu elemenata istog niza. Upamtite da usporedba dva pokazivača s različitim tipovima može uzrokovati nedefinirano ponašanje. Isječak koda koji se odnosi na usporedbu pokazivača spominje se u sljedećem:

#include
korištenje imenskog prostora std;
int glavni ( )
{
int arr1 [ 10 ] = { 4 , 7 , 9 , jedanaest , 14 , 16 , 18 , dvadeset , 22 , 25 } ;
int * ptr1 = i arr1 [ 3 ] ;
int * ptr2 = i arr1 [ 6 ] ;
int * ptr3 = i arr1 [ 8 ] ;
int * ptr4 = i arr1 [ 9 ] ;
ako ( ptr1 ==ptr2 )
{
std::cout << 'pokazivači su jednaki' << endl;
}
drugo ako ( ptr3 < =ptr4 )
{
std::cout << 'ptr3 je manji ili jednak od ptr4' << endl ;;
}
drugo
{
std::cout << 'pokazivači se ne uspoređuju ni u jednoj fazi' << endl;
}
povratak 0 ;
}


Ovdje uzimamo niz od 10 elemenata. Deklariramo četiri pokazivača koji pokazuju na različite indekse niza. Nakon toga uspoređujemo ova četiri pokazivača u različitim uvjetima kao što se vidi u danom kodu. U uvjetu 'if', provjerite je li pokazivač 'ptr1' jednak pokazivaču 'ptr2', a zatim ispišite 'pokazivači su jednaki'. Kada imamo više uvjeta u kojima koristimo uvjet 'else if' da provjerimo je li pokazivač 'ptr3' manji od jednakog pokazivaču 'ptr4'. Nakon svega toga kliknite na Izvrši > Prevedi i pokreni opcija.

Izlaz ovog koda je priložen u sljedećem:


Prikazuje važeći uvjet na ekranu konzole i izlazi iz kompilacije. Pokazivač 'ptr3' sadrži vrijednost koja je manja ili jednaka vrijednosti pokazivača 'ptr4'.

Scenarij 4: Prikaz neparnog broja pomoću aritmetike pokazivača

Ovdje ćemo vidjeti kako možemo dinamički dodijeliti memoriju za niz cijelih brojeva. Isječak koda koji se odnosi na ovaj slučaj dan je u nastavku:

#include
int glavni ( ) {
int brojevi [ ] = { 1 , 12 , 33 , 24 , petnaest , 776 , 71 , 18 , 29 , pedeset } ;
int * ptrr = brojevi;
std::cout << 'Neparni brojevi u nizovima: ' ;
za ( int i = 0 ; ja < 10 ; ++i ) {
ako ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << ' ' ;
}
ptrr++;
}
std::cout << std::endl;
povratak 0 ;
}


U glavnoj funkciji uzimamo niz koji sadrži 10 elemenata. Trebamo pokazivač koji pokazuje sve elemente u nizu da bismo provjerili neparan broj u nizu. U petlji 'za' provjerite neparan broj dijeljenjem trenutnog elementa niza. Brojač pokazivača se povećava nakon provjere jednog elementa niza.

Nakon izvršavanja koda, izlaz se prikazuje na zaslonu konzole koji je dan u nastavku:


Na taj način možemo prikazati neparne brojeve pomoću aritmetike pokazivača na zaslonu konzole.

Zaključak

Ovdje zaključujemo da je aritmetika pokazivača najučinkovitiji alat koji izvodi različite operacije u C++. Uvjerite se da pokazivač povećava ili smanjuje vrijednost niza koji ima istu vrstu podataka. Vrijednosti niza možemo usporediti po njihovim memorijskim adresama uz pomoć pokazivačke aritmetike u programskom jeziku C++. Možemo lako prelaziti nizom i upravljati memorijom uz pomoć pokazivačke aritmetike.