C++ rodyklės aritmetika

C Rodykles Aritmetika



Šis straipsnis yra apie rodyklės aritmetiką C++. Rodyklės yra kintamieji, kurie saugo duomenų atminties adresą. Žymeklio aritmetika yra galingas C++ programavimo kalbos bruožas, leidžiantis atlikti įvairias aritmetines operacijas, kai sudėjus, dauginant, dalinant, didinant, mažinant ir atimant naudojant žymeklį sukuriamas naujas atminties adresas mūsų atminties buferiuose. . Rodyklės aritmetika lengvai sukuria dinaminį atminties paskirstymą. Šiame C++ straipsnyje mes išmoksime, kaip įvairiais būdais manipuliuoti atminties adresu, naudodami nuorodas, ir pateiksime tinkamas gaires bei pavyzdžius.

1 scenarijus: žymeklis atlieka didinimo ir mažinimo operacijas

Čia sužinosime apie manipuliavimą žymekliu, kad būtų sukurti skirtingi atminties adresai, kurių paskirtis yra skirtinga. Didinimo ir mažinimo rodyklės taip pat yra sverto rodyklių aritmetika, kuri padidina arba sumažina adresą vienetu, padaugintu iš duomenų tipo, į kurį jie nukreipia, dydžio. Su šiuo scenarijumi susijęs kodo fragmentas pridedamas taip:







#include
naudojant vardų erdvę std;
const int Arr_Max = 5 ;
tarp pagrindinis ( ) {
int kur [ Arr_Max ] = { dvidešimt , 150 , 270 } ;
tarpt * ptr; // deklaruoti rodyklė
ptr = var;
dėl ( int i = 0 ; i < Arr_Max; i++ ) {
std::cout << 'Elemento atminties adresas yra: [' << i << '] = ' ;
std::cout << ptr << endl;
cout << 'Vertė pagal adresą yra [' << i << '] = ' ;
cout << * ptr << endl;
std::cout << 'žymiklis sėkmingai padidintas' << endl;
ptr++;
}
std::cout << 'Rodyklės adresas prieš sumažinimą' << ptr << endl;
ptr--;
std::cout << 'Rodyklės adresas po sumažinimo' << ptr << endl;
grąžinti 0 ;
}


Čia mes apibrėžiame reikalingą biblioteką kode pačioje pradžioje: „ “. Mes apibrėžiame atminties paskirstymą, kad rezervuotume vietą atmintyje, kuri yra „Arr_Max=5“. Pagrindinėje funkcijoje inicijuojame masyvą ir perduodame tam masyvei atminties dydį. Be to, „ptr“ žymeklio deklaracija taip pat reikalinga norint nurodyti atminties adresą atmintyje.



Perduodame masyvą žymekliui, kad pasiektume adresą. Kaip visi žinome, masyvuose visada yra keli elementai skirtingose ​​vietose. Taigi, norint pasiekti kiekvieną masyvo elementą, mums reikėjo kilpos su „pagalbos“ rodykle. Kiekvieną kartą, kai ciklas vykdomas, mes gauname atminties adresą ir reikšmes pagal šį adresą, naudodami žymeklio aritmetinį „ptr++“ prieaugio operatorių, kuris perkelia atminties adresą į kitą atminties adresą. Ciklo vykdymo ciklas priklauso nuo masyvo dydžio. Už ciklo ribų mes norime sugrąžinti žymeklį į ankstesnį atminties adresą tiesiog naudodami „ptr--“ mažinimo žymeklį.



Vykdykite šį kodą spustelėdami Execute>Compile & Run parinktį ir gausite šią išvestį:






Tikimės, kad šią išvestį lengva suprasti. Keičiasi atminties adresas ir reikšmė. Perkelti žymeklį iš vienos vietos galima tik naudojant didinimo žymeklio aritmetiką C++.

2 scenarijus: dviejų rodyklių atėmimas C++

Šiame scenarijuje išmoksime atimti du ar daugiau rodyklių C++. Visos aritmetinės operacijos, kurių metu atliekama atimtis, yra gyvybiškai svarbūs procesai, nes vienu metu galime atimti dvi rodykles tik tada, kai jos turi tą patį duomenų tipą.



Kitos operacijos, tokios kaip sudėjimas, daugyba ir padalijimas, žymeklyje neįmanomos, nes jos neturi prasmės adresuojant atmintyje. Kodo fragmentas pridedamas taip:

#include
tarp pagrindinis ( ) {
Jis vilioja [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
tarpt * ptrr1 = & Į tai [ 3 ] ; // Nukreipkite žymiklį į trečiąjį elementą ( 42 )
tarpt * ptrr2 = & Į tai [ 6 ] ; // Žymiklis į šeštą elementą ( 89 )
ptrdiff_t ptratimti = ptrr2 - ptrr1;

std::cout << Skirtumas tarp šių adresų yra: << ptratimti << 'elementai' << std::endl;
grąžinti 0 ;
}


Atimties operacija yra rasti skirtumą tarp atminties adreso C++. Pagrindinėje funkcijoje paimame masyvą, kuriame yra skirtingos reikšmės skirtinguose indeksuose. Masyve kiekvienas indeksas turi skirtingą atminties vietą. Skirtumą tarp dviejų rodyklių galime rasti tik rodyklės aritmetikos pagalba. Čia mes naudojame specialų žymeklio tipą „ptrdiff_t“, kuris turi būti naudojamas norint rasti skirtumus tarp dviejų ar daugiau C++ rodyklių.

Šio kodo išvestis pridedama taip:


Skirtumas tarp šių adresų yra elementas, kuris yra 3.

3 scenarijus: palyginkite du ar daugiau rodyklių C++

Šiame scenarijuje sužinosime, kaip palyginti skirtingus C++ rodmenis naudojant skirtingus reliacinius operatorius, pvz., „==“, „<=“, „>=“, „<“, ”>“. Rodiklius galime palyginti tik tuo atveju, jei jie nukreipia į to paties masyvo elementų adresą. Atminkite, kad dviejų skirtingų tipų rodyklių palyginimas gali sukelti neapibrėžtą elgesį. Kodo fragmentas, susijęs su rodyklės palyginimu, paminėtas toliau:

#include
naudojant vardų erdvę std;
tarp pagrindinis ( )
{
tarpas arr1 [ 10 ] = { 4 , 7 , 9 , vienuolika , 14 , 16 , 18 , dvidešimt , 22 , 25 } ;
tarpt * ptr1 = & arr1 [ 3 ] ;
tarpt * ptr2 = & arr1 [ 6 ] ;
tarpt * ptr3 = & arr1 [ 8 ] ;
tarpt * ptr4 = & arr1 [ 9 ] ;
jeigu ( ptr1 ==ptr2 )
{
std::cout << 'rodyklės yra lygios' << endl;
}
Kitas jeigu ( ptr3 < =ptr4 )
{
std::cout << 'ptr3 yra mažesnis arba lygus ptr4' << endl ;;
}
Kitas
{
std::cout << 'rodikliai nėra lyginami jokiame etape' << endl;
}
grąžinti 0 ;
}


Čia paimame masyvą su 10 elementų. Paskelbiame keturias rodykles, kurios nurodo skirtingą masyvo indeksą. Po to palyginame šias keturias nuorodas skirtingomis sąlygomis, kaip matyti pateiktame kode. Esant sąlygai „jei“, patikrinkite, ar „ptr1“ rodyklė yra lygi „ptr2“ žymekliui, tada išspausdinkite „rodyklės yra lygios“. Kai turime kelias sąlygas, kai naudojame sąlygą „else if“, kad patikrintume, ar „ptr3“ rodyklė yra mažesnė nei lygi „ptr4“ žymekliui. Po viso to spustelėkite Vykdyti> Kompiliuoti ir vykdyti variantas.

Šio kodo išvestis pridedama taip:


Konsolės ekrane rodoma tinkama sąlyga ir baigiama kompiliacija. Rodyklėje „ptr3“ yra reikšmė, kuri yra mažesnė arba lygi „ptr4“ žymeklio reikšmei.

4 scenarijus: rodykite nelyginį skaičių naudodami rodyklės aritmetiką

Čia pamatysime, kaip galime dinamiškai paskirstyti atmintį sveikojo skaičiaus masyvei. Su šiuo atveju susijęs kodo fragmentas pateikiamas taip:

#include
tarp pagrindinis ( ) {
int skaičiai [ ] = { 1 , 12 , 33 , 24 , penkiolika , 776 , 71 , 18 , 29 , penkiasdešimt } ;
tarpt * ptrr = skaičiai;
std::cout << 'Nelyginiai skaičiai masyvuose:' ;
dėl ( int i = 0 ; i < 10 ; ++i ) {
jeigu ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << ' ' ;
}
ptrr++;
}
std::cout << std::endl;
grąžinti 0 ;
}


Pagrindinėje funkcijoje paimame masyvą, kuriame yra 10 elementų. Mums reikia rodyklės, kuri nurodo visus masyvo elementus, kad patikrintume nelyginį skaičių masyve. Kilpoje „for“ patikrinkite nelyginį skaičių padalydami dabartinį masyvo elementą. Rodyklės skaitiklis padidinamas patikrinus vieną masyvo elementą.

Įvykdžius kodą, išvestis rodoma konsolės ekrane, kuris pateikiamas taip:


Tokiu būdu nelyginius skaičius galime rodyti naudodami rodyklės aritmetiką konsolės ekrane.

Išvada

Čia darome išvadą, kad rodyklės aritmetika yra efektyviausias įrankis, atliekantis įvairias operacijas C++. Įsitikinkite, kad žymeklis padidina arba sumažina masyvo, kurio duomenų tipas yra toks pat, reikšmę. Masyvo reikšmes galime palyginti pagal jų atminties adresus naudodamiesi rodyklės aritmetika C++ programavimo kalba. Mes galime lengvai pereiti masyvą ir valdyti atmintį naudodami rodyklės aritmetiką.