Aritmetika ukazovateľa C++

Aritmetika Ukazovatela C



Tento článok je o aritmetike ukazovateľov v C++. Ukazovatele sú premenné, ktoré ukladajú pamäťovú adresu údajov. Aritmetika ukazovateľa je silným charakteristickým znakom vo svete programovacieho jazyka C++, ktorý nám umožňuje zaoberať sa rôznymi aritmetickými operáciami, v ktorých sčítanie, násobenie, delenie, prírastok, dekrementácia a odčítanie zahŕňa ukazovateľ na vytvorenie novej adresy pamäte v našich vyrovnávacích pamätiach. . Aritmetika ukazovateľa ľahko vytvorí dynamickú alokáciu pamäte. V tomto článku C++ sa naučíme, ako rôznymi spôsobmi manipulovať s adresou pamäte pomocou ukazovateľov a poskytneme správne pokyny a príklady.

Scenár 1: Ukazovateľ vykonáva operácie zvýšenia a zníženia

Tu sa dozvieme o manipulácii s ukazovateľom na vytvorenie rôznych adries pamäte, ktoré majú rôzne účely. Inkrementačné a dekrementačné ukazovatele sú tiež aritmetikou ukazovateľov pákového efektu, ktoré zvyšujú alebo znižujú adresu faktorom jedna vynásobeným veľkosťou typu údajov, na ktorý ukazujú. Útržok kódu súvisiaci s týmto scenárom je priložený v nasledujúcom texte:







#include
pomocou menného priestoru std;
const int Arr_Max = 5 ;
int main ( ) {
int  kde [ Arr_Max ] = { dvadsať , 150 , 270 } ;
int * ptr; // vyhlásiť ukazovateľ
ptr = var;
pre ( int i = 0 ; i < Arr_Max; i++ ) {
std::cout << 'Pamäťová adresa prvku je: [' << i << '] = ' ;
std::cout << ptr << endl;
cout << 'Hodnota oproti adrese je [' << i << '] = ' ;
cout << * ptr << endl;
std::cout << 'ukazovateľ sa úspešne zvýšil' << endl;
ptr++;
}
std::cout << 'Adresa ukazovateľa pred znížením' << ptr << endl;
ptr--;
std::cout << 'Adresa ukazovateľa po znížení' << ptr << endl;
vrátiť 0 ;
}


Tu definujeme požadovanú knižnicu v kóde na úplnom začiatku: „ “. Definujeme alokáciu pamäte na rezervovanie miesta v pamäti, ktorá je „Arr_Max=5“. Vo funkcii main inicializujeme pole a tomuto poli odovzdáme veľkosť pamäte. Ďalej je potrebná aj deklarácia ukazovateľa „ptr“, aby poukázala na adresu pamäte v pamäti.



Odovzdáme pole do ukazovateľa, aby sme získali prístup k adrese. Ako všetci vieme, polia vždy obsahujú viacero položiek na rôznych miestach. Na prístup ku každému prvku poľa sme teda potrebovali slučku s ukazovateľom „pomoc“. Zakaždým, keď sa slučka vykoná, získame adresu pamäte a hodnoty oproti tejto adrese pomocou aritmetického operátora ukazovateľa „ptr++“, ktorý posúva adresu pamäte na ďalšiu adresu pamäte. Cyklus vykonávania slučky závisí od veľkosti poľa. Mimo cyklu chceme dostať ukazovateľ späť na predchádzajúcu adresu pamäte jednoduchým použitím ukazovateľa dekrementu „ptr--“.



Vykonajte tento kód kliknutím na možnosť Vykonať> Kompilovať a spustiť a dostanete nasledujúci výstup:






Dúfajme, že tento výstup je ľahko pochopiteľný. Adresa a hodnota pamäte sa zmenia. Posunutie ukazovateľa z jedného miesta je možné len z aritmetiky ukazovateľa prírastku v C++.

Scenár 2:  Odčítanie dvoch ukazovateľov v C++

V tomto scenári sa naučíme, ako odpočítať dva alebo viac ukazovateľov v C++. Všetky aritmetické operácie, pri ktorých dochádza k odčítaniu, sú životne dôležité procesy, pretože dva ukazovatele môžeme súčasne odčítať iba vtedy a len vtedy, ak majú rovnaký typ údajov.



Ostatné operácie ako sčítanie, násobenie a delenie nie sú v ukazovateli možné, pretože nemajú zmysel pri adresovaní pamäte. Útržok kódu je priložený v nasledujúcom texte:

#include
int main ( ) {
Kýva [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
int * ptrr1 = & K tomu [ 3 ] ; // Ukazovateľ na tretí prvok ( 42 )
int * ptrr2 = & K tomu [ 6 ] ; // Ukazovateľ na šiesty prvok ( 89 )
ptrdiff_t ptrodčítať = ptrr2 - ptrr1;

std::cout << 'Rozdiel medzi týmito adresami je: ' << ptrodčítať << 'prvky' << std::endl;
vrátiť 0 ;
}


Operácia odčítania je nájdenie rozdielu medzi adresou pamäte v C++. V hlavnej funkcii vezmeme pole, ktoré obsahuje rôzne hodnoty v rôznych indexoch. V poli má každý index iné miesto v pamäti. Rozdiel medzi dvoma ukazovateľmi môžeme nájsť iba pomocou aritmetiky ukazovateľa. Tu používame špeciálny typ ukazovateľa „ptrdiff_t“, ktorý sa musí použiť na nájdenie rozdielov medzi dvoma alebo viacerými ukazovateľmi v C++.

Výstup tohto kódu je pripojený v nasledujúcom texte:


Rozdiel medzi týmito adresami je podľa zveráka prvku, ktorý je 3.

Scenár 3: Porovnanie dvoch alebo viacerých ukazovateľov v C++

V tomto scenári sa naučíme, ako porovnať rôzne ukazovatele v C++ pomocou rôznych relačných operátorov, ako sú „==“, „<=“, „>=“, „<“, „>“. Ukazovatele môžeme porovnávať len vtedy, ak ukazujú na adresu prvkov toho istého poľa. Pamätajte, že porovnávanie dvoch ukazovateľov s rôznymi typmi môže spôsobiť nedefinované správanie. Útržok kódu, ktorý súvisí s porovnaním ukazovateľov, je uvedený v nasledujúcom texte:

#include
pomocou menného priestoru std;
int main ( )
{
int arr1 [ 10 ] = { 4 , 7 , 9 , jedenásť , 14 , 16 , 18 , dvadsať , 22 , 25 } ;
int * ptr1 = & arr1 [ 3 ] ;
int * ptr2 = & arr1 [ 6 ] ;
int * ptr3 = & arr1 [ 8 ] ;
int * ptr4 = & arr1 [ 9 ] ;
ak ( ptr1 ==ptr2 )
{
std::cout << 'ukazovatele sú rovnaké' << endl;
}
inak ak ( ptr3 < =ptr4 )
{
std::cout << 'ptr3 je menší alebo rovný ako ptr4' << endl ;;
}
inak
{
std::cout << 'ukazovatele sa neporovnávajú v žiadnej fáze' << endl;
}
vrátiť 0 ;
}


Tu vezmeme pole s 10 prvkami. Deklarujeme štyri ukazovatele, ktoré ukazujú na iný index poľa. Potom porovnáme tieto štyri ukazovatele pri rôznych podmienkach, ako je vidieť v danom kóde. V podmienke „if“ skontrolujte, či sa ukazovateľ „ptr1“ rovná ukazovateľu „ptr2“, a potom vytlačte „ukazovatele sú rovnaké“. Keď máme viacero podmienok, pri ktorých používame podmienku „else if“ na kontrolu, či je ukazovateľ „ptr3“ menší ako ukazovateľ „ptr4“. Po tom všetkom kliknite na Vykonať > Kompilovať a spustiť možnosť.

Výstup tohto kódu je pripojený v nasledujúcom texte:


Na obrazovke konzoly zobrazí platný stav a ukončí kompiláciu. Ukazovateľ „ptr3“ obsahuje hodnotu, ktorá je menšia alebo rovná hodnote ukazovateľa „ptr4“.

Scenár 4: Zobrazte nepárne číslo pomocou aritmetiky ukazovateľa

Tu uvidíme, ako môžeme dynamicky alokovať pamäť pre pole celého čísla. Útržok kódu súvisiaci s týmto prípadom je uvedený v nasledujúcom texte:

#include
int main ( ) {
int čísla [ ] = { 1 , 12 , 33 , 24 , pätnásť , 776 , 71 , 18 , 29 , päťdesiat } ;
int * ptrr = čísla;
std::cout << 'Nepárne čísla v poliach: ' ;
pre ( int i = 0 ; i < 10 ; ++i ) {
ak ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << '' ;
}
ptrr++;
}
std::cout << std::endl;
vrátiť 0 ;
}


V hlavnej funkcii vezmeme pole, ktoré obsahuje 10 prvkov. Potrebujeme ukazovateľ, ktorý ukazuje na všetky prvky v poli, aby sme skontrolovali nepárne číslo v poli. V slučke „for“ skontrolujte nepárne číslo vydelením aktuálneho prvku poľa. Počítadlo ukazovateľa sa zvýši po kontrole jedného prvku poľa.

Po vykonaní kódu sa výstup zobrazí na obrazovke konzoly, ktorá je uvedená v nasledujúcom texte:


Týmto spôsobom môžeme zobraziť nepárne čísla pomocou aritmetiky ukazovateľa na obrazovke konzoly.

Záver

Dospeli sme k záveru, že aritmetika ukazovateľa je najefektívnejším nástrojom, ktorý vykonáva rôzne operácie v C++. Uistite sa, že ukazovateľ zvyšuje alebo znižuje hodnotu poľa, ktoré má rovnaký typ údajov. Hodnoty poľa môžeme porovnávať podľa ich pamäťových adries pomocou aritmetiky ukazovateľa v programovacom jazyku C++. Môžeme prechádzať poľom a spravovať pamäť jednoducho pomocou aritmetiky ukazovateľa.