Ц++ аритметика показивача

C Aritmetika Pokazivaca



Овај чланак је о аритметици показивача у Ц++. Показивачи су променљиве које чувају меморијску адресу података. Аритметика показивача је моћно обележје у свету програмског језика Ц++ које нам омогућава да се бавимо различитим аритметичким операцијама у којима сабирање, множење, дељење, повећање, смањење и одузимање укључују показивач за развој нове меморијске адресе у нашим меморијским баферима . Аритметика показивача лако креира динамичку алокацију меморије. У овом Ц++ чланку ћемо научити како да манипулишемо меморијском адресом на различите начине уз помоћ показивача и пружимо одговарајуће смернице и примере.

Сценарио 1: Показивач врши операције повећања и смањења

Овде ћемо научити о манипулацији показивачем за производњу различитих меморијских адреса које имају различите сврхе. Повећајући и декрементирајући показивачи су такође аритметика показивача полуге која повећава или смањује адресу за фактор један помножен величином типа података на који указују. Исечак кода који се односи на овај сценарио је приложен у следећем:







#инцлуде<иостреам>
користећи простор имена стд;
цонст инт Арр_Мак = 5 ;
инт маин ( ) {
инт  где [ Арр_Мак ] = { двадесет , 150 , 270 } ;
инт * птр; // прогласити показивач
птр = вар;
за ( инт и = 0 ; и < Арр_Мак; и++ ) {
стд::цоут << „Меморијска адреса елемента је: [“ << и << '] = ' ;
стд::цоут << птр << ендл;
цоут << „Вредност у односу на адресу је [“ << и << '] = ' ;
цоут << * птр << ендл;
стд::цоут << 'показивач је успешно повећан' << ендл;
птр++;
}
стд::цоут << „Адреса показивача пре декремента“ << птр << ендл;
птр--;
стд::цоут << „Адреса показивача после смањења“ << птр << ендл;
повратак 0 ;
}


Овде дефинишемо потребну библиотеку у коду на самом почетку: “<иостреам>”. Дефинишемо алокацију меморије да резервишемо простор у меморији који је „Арр_Мак=5“. У главној функцији, ми иницијализујемо низ и прослеђујемо величину меморије том низу. Затим, декларација показивача „птр“ је такође потребна да се укаже на меморијску адресу у меморији.



Проследимо низ показивачу да бисмо приступили адреси. Као што сви знамо, низови увек садрже више ставки на различитим локацијама. Дакле, била нам је потребна петља са показивачем „помоћи“ да бисмо приступили сваком елементу низа. Сваки пут када се петља изврши, добијамо меморијску адресу и вредности у односу на ову адресу уз помоћ аритметичког оператора инкремента показивача „птр++“ који помера меморијску адресу на следећу адресу меморије. Циклус извршавања петље зависи од величине низа. Изван петље, желимо да вратимо показивач на претходну меморијску адресу само помоћу показивача декремента „птр--“.



Извршите овај код кликом на опцију Екецуте>Цомпиле & Рун и добићете следећи излаз:






Надамо се да је овај излаз лако разумети. Меморијска адреса и вредност се мењају. Померање показивача са једне локације могуће је само из аритметике инкремента показивача у Ц++.

Сценарио 2:  Одузимање два показивача у Ц++

У овом сценарију ћемо научити како да одузмемо два или више показивача у Ц++. Све аритметичке операције у којима долази одузимање су витални процеси јер можемо одузети два показивача истовремено ако и само ако имају исти тип података.



Друге операције као што су сабирање, множење и дељење нису могуће у показивачу јер немају смисла у меморијском адресирању. Исечак кода је приложен у следећем:

#инцлуде <иостреам>
инт маин ( ) {
Он позива [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
инт * птрр1 = & Томе [ 3 ] ; // Показивач на трећи елемент ( 42 )
инт * птрр2 = & Томе [ 6 ] ; // Показивач на шести елемент ( 89 )
птрдифф_т птрсубтрацт = птрр2 - птрр1;

стд::цоут << 'Разлика између ових адреса је: ' << птрсубтрацт << 'елементи' << стд::ендл;
повратак 0 ;
}


Операција одузимања је проналажење разлике између меморијске адресе у Ц++. У главној функцији узимамо низ који садржи различите вредности на различитим индексима. У низу, сваки индекс има другачију меморијску локацију. Разлику између два показивача можемо пронаћи само уз помоћ показивачке аритметике. Овде користимо посебан тип показивача „птрдифф_т“ који се мора користити за проналажење разлика између два или више показивача у Ц++.

Излаз овог кода је приложен у следећем:


Разлика између ових адреса је у вези са елементом који је 3.

Сценарио 3: Упоредите два или више показивача у Ц++

У овом сценарију ћемо научити како да упоредимо различите показиваче у Ц++ користећи различите релационе операторе попут „==“, „<=“, „>=“, „<“, „>“. Можемо да упоредимо показиваче само ако указују на адресе елемената истог низа. Запамтите да поређење два показивача са различитим типовима може изазвати недефинисано понашање. Исечак кода који се односи на поређење показивача помиње се у следећем:

#инцлуде <иостреам>
користећи простор имена стд;
инт маин ( )
{
инт арр1 [ 10 ] = { 4 , 7 , 9 , Једанаест , 14 , 16 , 18 , двадесет , 22 , 25 } ;
инт * птр1 = & арр1 [ 3 ] ;
инт * птр2 = & арр1 [ 6 ] ;
инт * птр3 = & арр1 [ 8 ] ;
инт * птр4 = & арр1 [ 9 ] ;
ако ( птр1 ==птр2 )
{
стд::цоут << 'показивачи су једнаки' << ендл;
}
друго ако ( птр3 < =птр4 )
{
стд::цоут << „птр3 је мањи или једнак птр4“ << ендл ;;
}
друго
{
стд::цоут << 'показивачи се не упоређују ни у једној фази' << ендл;
}
повратак 0 ;
}


Овде узимамо низ са 10 елемената. Декларишемо четири показивача који указују на други индекс низа. Након тога, упоређујемо ова четири показивача под различитим условима као што се види у датом коду. У услову „иф“, проверите да ли је показивач „птр1“ једнак показивачу „птр2“, а затим одштампајте „показиваче су једнаки“. Када имамо више услова у којима користимо услов „елсе иф“ да проверимо да ли је показивач „птр3“ мањи од „птр4“ показивача. Након свега тога, кликните на Изврши > Преведи и покрени опција.

Излаз овог кода је приложен у следећем:


Приказује важећи услов на екрану конзоле и излази из компилације. Показивач „птр3“ садржи вредност која је мања или једнака вредности показивача „птр4“.

Сценарио 4: Прикажите непаран број помоћу аритметике показивача

Овде ћемо видети како можемо динамички да доделимо меморију за низ целог броја. Исечак кода који се односи на овај случај је дат у следећем:

#инцлуде <иостреам>
инт маин ( ) {
инт бројеви [ ] = { 1 , 12 , 33 , 24 , петнаест , 776 , 71 , 18 , 29 , педесет } ;
инт * птрр = бројеви;
стд::цоут << 'Непарни бројеви у низовима: ' ;
за ( инт и = 0 ; и < 10 ; ++и ) {
ако ( * птрр % 2 ! = 0 ) {
стд::цоут << * птрр << ' ' ;
}
птрр++;
}
стд::цоут << стд::ендл;
повратак 0 ;
}


У главној функцији узимамо низ који садржи 10 елемената. Потребан нам је показивач који указује на све елементе у низу да бисмо проверили непаран број у низу. У петљи „фор“, проверите непаран број тако што ћете поделити тренутни елемент низа. Бројач показивача се повећава након провере једног елемента низа.

Након извршавања кода, излаз се приказује на екрану конзоле који је дат у следећем:


На овај начин можемо приказати непарне бројеве користећи аритметику показивача на екрану конзоле.

Закључак

Овде закључујемо да је аритметика показивача најефикаснији алат који изводи различите операције у Ц++. Уверите се да показивач повећава или смањује вредност низа који има исти тип података. Можемо да упоредимо вредности низа по њиховим меморијским адресама уз помоћ аритметике показивача у програмском језику Ц++. Можемо да прелазимо низ и лако управљамо меморијом уз помоћ аритметике показивача.