C++ rādītāja aritmētika

C Raditaja Aritmetika



Šis raksts ir par rādītāja aritmētiku C++ valodā. Rādītāji ir mainīgie, kas saglabā datu atmiņas adresi. Rādītāja aritmētika ir spēcīga iezīme C++ programmēšanas valodas pasaulē, kas ļauj mums veikt dažādas aritmētiskās darbības, kurās saskaitīšana, reizināšana, dalīšana, palielināšana, samazināšana un atņemšana ietver rādītāju, lai izstrādātu jaunu atmiņas adresi mūsu atmiņas buferos. . Rādītāja aritmētika viegli izveido dinamisko atmiņas sadalījumu. Šajā C++ rakstā mēs uzzināsim, kā ar norādes palīdzību dažādos veidos manipulēt ar atmiņas adresi un sniegsim atbilstošas ​​vadlīnijas un piemērus.

1. scenārijs: rādītājs veic palielināšanas un samazināšanas darbības

Šeit mēs uzzināsim par manipulācijām ar rādītāju, lai izveidotu dažādas atmiņas adreses, kurām ir dažādi mērķi. Palielināšanas un samazināšanas rādītāji ir arī sviras norādes aritmētika, kas palielina vai samazina adresi, reizinot to ar tā datu veida lielumu, uz kuru tie norāda. Ar šo scenāriju saistītais koda fragments ir pievienots tālāk norādītajā veidā.







#include
izmantojot namespace std;
const int Arr_Max = 5 ;
int galvenais ( ) {
int kur [ Arr_Max ] = { divdesmit , 150 , 270 } ;
starpt * ptr; // paziņot rādītājs
ptr = var;
priekš ( int i = 0 ; i < Arr_Max; i++ ) {
std::cout << 'Elementa atmiņas adrese ir: [' << i << '] = ' ;
std::cout << ptr << endl;
cout << 'Vērtība pret adresi ir [' << i << '] = ' ;
cout << * ptr << endl;
std::cout << 'rādītājs veiksmīgi palielināts' << endl;
ptr++;
}
std::cout << 'Rādītāja adrese pirms samazināšanas' << ptr << endl;
ptr--;
std::cout << 'Rādītāja adrese pēc samazināšanas' << ptr << endl;
atgriezties 0 ;
}


Šeit mēs definējam nepieciešamo bibliotēku kodā pašā sākumā: “ ”. Mēs definējam atmiņas sadalījumu, lai rezervētu vietu atmiņā, kas ir “Arr_Max=5”. Galvenajā funkcijā mēs inicializējam masīvu un nododam atmiņas lielumu šim masīvam. Tālāk ir nepieciešama arī rādītāja deklarācija “ptr”, lai norādītu atmiņas adresi atmiņā.



Mēs nododam masīvu rādītājam, lai piekļūtu adresei. Kā mēs visi zinām, masīvi vienmēr satur vairākus vienumus dažādās vietās. Tātad, lai piekļūtu katram masīva elementam, mums bija nepieciešama cilpa ar “palīdzības” rādītāju. Katru reizi, kad cilpa tiek izpildīta, mēs iegūstam atmiņas adresi un vērtības pret šo adresi, izmantojot rādītāja aritmētisko “ptr++” pieauguma operatoru, kas novirza atmiņas adresi uz nākamo atmiņas adresi. Cilpas izpildes cikls ir atkarīgs no masīva lieluma. Ārpus cilpas mēs vēlamies novirzīt rādītāju atpakaļ uz iepriekšējo atmiņas adresi, vienkārši izmantojot “ptr--” samazināšanas rādītāju.



Izpildiet šo kodu, noklikšķinot uz opcijas Izpildīt> Kompilēt un palaist, un jūs saņemsiet šādu izvadi:






Cerams, ka šī izvade ir viegli saprotama. Tiek mainīta atmiņas adrese un vērtība. Rādītāja pārvietošana no vienas vietas ir iespējama tikai no pieauguma rādītāja aritmētikas programmā C++.

2. scenārijs: divu rādītāju atņemšana programmā C++

Šajā scenārijā mēs uzzināsim, kā atņemt divus vai vairākus rādītājus programmā C++. Visas aritmētiskās darbības, kurās tiek veikta atņemšana, ir būtiski procesi, jo mēs varam atņemt divus rādītājus vienlaikus tikai tad, ja tiem ir vienāds datu tips.



Citas darbības, piemēram, saskaitīšana, reizināšana un dalīšana, rādītājā nav iespējamas, jo tām nav jēgas adresēšanā atmiņā. Koda fragments ir pievienots šādi:

#include
int galvenais ( ) {
Viņš pamāj [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
starpt * ptrr1 = & Uz to [ 3 ] ; // Norādiet uz trešo elementu ( 42 )
starpt * ptrr2 = & Uz to [ 6 ] ; // Rādītājs uz sesto elementu ( 89 )
ptrdiff_t ptratņemt = ptrr2 - ptrr1;

std::cout << 'Atšķirība starp šīm adresēm ir: << ptratņemt << 'elementi' << std::endl;
atgriezties 0 ;
}


Atņemšanas darbība ir starpības atrašana starp atmiņas adresi C++ valodā. Galvenajā funkcijā mēs ņemam masīvu, kurā ir dažādas vērtības dažādos indeksos. Masīvā katram indeksam ir atšķirīga atmiņas vieta. Atšķirību starp diviem rādītājiem varam atrast tikai ar rādītāja aritmētikas palīdzību. Šeit mēs izmantojam īpašu rādītāja veidu “ptrdiff_t”, kas jāizmanto, lai atrastu atšķirības starp diviem vai vairākiem rādītājiem C++.

Šī koda izvade ir pievienota šādi:


Atšķirība starp šīm adresēm ir elementa skrūvspīles, kas ir 3.

3. scenārijs: salīdziniet divus vai vairākus norādes programmā C++

Šajā scenārijā mēs uzzināsim, kā salīdzināt dažādas norādes programmā C++, izmantojot dažādus relāciju operatorus, piemēram, “==”, “<=”, “>=”, “<”, ”>”. Rādītājus varam salīdzināt tikai tad, ja tie norāda uz tā paša masīva elementu adresi. Atcerieties, ka divu rādītāju salīdzināšana ar dažādiem veidiem var izraisīt nenoteiktu uzvedību. Koda fragments, kas ir saistīts ar rādītāju salīdzināšanu, ir minēts tālāk:

#include
izmantojot namespace std;
int galvenais ( )
{
int arr1 [ 10 ] = { 4 , 7 , 9 , vienpadsmit , 14 , 16 , 18 , divdesmit , 22 , 25 } ;
starpt * ptr1 = & arr1 [ 3 ] ;
starpt * ptr2 = & arr1 [ 6 ] ;
starpt * ptr3 = & arr1 [ 8 ] ;
starpt * ptr4 = & arr1 [ 9 ] ;
ja ( ptr1 ==ptr2 )
{
std::cout << 'rādītāji ir vienādi' << endl;
}
cits ja ( ptr3 < =ptr4 )
{
std::cout << 'ptr3 ir mazāks vai vienāds ar ptr4' << endl ;;
}
cits
{
std::cout << 'rādītāji netiek salīdzināti nevienā posmā' << endl;
}
atgriezties 0 ;
}


Šeit mēs ņemam masīvu ar 10 elementiem. Mēs deklarējam četrus rādītājus, kas norāda uz citu masīva indeksu. Pēc tam mēs salīdzinām šīs četras norādes dažādos apstākļos, kā redzams dotajā kodā. Nosacījuma “ja” gadījumā pārbaudiet, vai rādītājs “ptr1” ir vienāds ar rādītāju “ptr2”, un pēc tam izdrukājiet “rādītāji ir vienādi”. Ja mums ir vairāki nosacījumi, kuros mēs izmantojam nosacījumu “else if”, lai pārbaudītu, vai rādītājs “ptr3” ir mazāks par “ptr4” rādītāju. Pēc visa tā noklikšķiniet uz Izpildīt > Kompilēt un palaist opciju.

Šī koda izvade ir pievienota šādi:


Tas parāda derīgu nosacījumu konsoles ekrānā un iziet no kompilācijas. “ptr3” rādītājs satur vērtību, kas ir mazāka vai vienāda ar “ptr4” rādītāja vērtību.

4. scenārijs: parādiet nepāra skaitli, izmantojot rādītāja aritmētiku

Šeit mēs redzēsim, kā mēs varam dinamiski piešķirt atmiņu vesela skaitļa masīvam. Ar šo gadījumu saistītais koda fragments ir norādīts tālāk.

#include
int galvenais ( ) {
int skaitļi [ ] = { 1 , 12 , 33 , 24 , piecpadsmit , 776 , 71 , 18 , 29 , piecdesmit } ;
starpt * ptrr = skaitļi;
std::cout << 'Nepāra skaitļi masīvos:' ;
priekš ( int i = 0 ; i < 10 ; ++i ) {
ja ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << ' ' ;
}
ptrr++;
}
std::cout << std::endl;
atgriezties 0 ;
}


Galvenajā funkcijā mēs ņemam masīvu, kurā ir 10 elementi. Mums ir nepieciešams rādītājs, kas norāda uz visiem masīva elementiem, lai pārbaudītu nepāra numuru masīvā. Ciklā “for” pārbaudiet nepāra skaitli, dalot pašreizējo masīva elementu. Rādītāja skaitītājs tiek palielināts pēc viena masīva elementa pārbaudes.

Pēc koda izpildes izvade tiek parādīta konsoles ekrānā, kas norādīts tālāk:


Tādā veidā mēs varam parādīt nepāra skaitļus, izmantojot rādītāja aritmētiku konsoles ekrānā.

Secinājums

Šeit mēs secinām, ka rādītāja aritmētika ir visefektīvākais rīks, kas veic dažādas darbības C++. Pārliecinieties, vai rādītājs palielina vai samazina tā masīva vērtību, kuram ir tāds pats datu tips. Mēs varam salīdzināt masīva vērtības pēc to atmiņas adresēm ar rādītāja aritmētikas palīdzību C++ programmēšanas valodā. Mēs varam viegli šķērsot masīvu un pārvaldīt atmiņu, izmantojot rādītāja aritmētiku.