Разумевање и употреба показивача у Делфима

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

Из тог разлога можете прочитати о томе како је низ или објекат заиста само показивач или да је руковалац догађаја, попут ОнЦлицк-а, заправо показатељ процедуре.

Показивач на тип података

Једноставно речено, показивач је променљива која садржи адресу било чега у меморији.

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

Већину времена показивачи у Делфима указују на одређену врсту:

вар
иВалуе, ј: цијели број; пИнтВалуе: ^ цели број;
започети
иВалуе: = 2001; пИнтВалуе: = @иВалуе;... ј: = пИнтВалуе ^;
крај
;

Тхе синтакса за декларирање типа података показивача користи а царет (^). У горњем коду, иВалуе је варијабла целог броја, а пИнтВалуе је показивач целог броја. Будући да показивач није ништа више од адресе у меморији, морамо му додијелити локацију (адресу) вриједности похрањене у иВалуе цијелој варијабли.

instagram viewer

Тхе @ оператор враћа адресу променљиве (или функцију или поступак као што ће бити приказано у наставку). Еквивалентно @ оператору је Аддр функција. Имајте на уму да вредност пИнтВалуе није 2001.

У овом узорку кода, пИнтВалуе је укуцани цео поинтер. Добар стил програмирања је да користите укуцане показиваче колико год можете. Тип података Поинтера је генерички тип показивача; представља показивач на било које податке.

Имајте на уму да се када се "^" појави након променљиве поинтера, де-референција на показивач; то јест, враћа вредност меморисану на меморијску адресу коју држи показивач. У овом примеру, променљива ј има исту вредност као иВалуе. Можда изгледа да ово нема сврхе када иВалуе једноставно можемо доделити ј, али овај део кода стоји иза већине позива на Вин АПИ.

НИЛинг Поинтерс

Неодређени показивачи су опасни. Пошто нам показивачи омогућавају да радимо директно са рачунарском меморијом, ако покушамо (грешком) упишемо на заштићену локацију у меморији, могли бисмо добити грешку у кршењу приступа. То је разлог због којег увек морамо иницијализирати показивач на НИЛ.

НИЛ је посебна константа која се може доделити било којем показивачу. Кад је нил додељен показивачу, показивач не односи ништа. Делпхи представља, на пример, празан динамички низ или дугачак низ као нилски поинтер.

Цхарацтер Поинтерс

Основни типови ПАнсиЦхар и ПВидеЦхар представљају показиваче на вредности АнсиЦхар и ВидеЦхар. Генерички ПЦхар представља показивач на Цхар варијаблу.

Ови показивачи карактера користе се за манипулирање нулл-терминалом жице. Помислите на ПЦхар као на показивач на нулл-терминирани низ или на низ који га представља.

Показивачи на рекорде

Када дефинирамо запис или други тип података, уобичајена је пракса да се дефинира и показивач на тај тип. То олакшава манипулацију примерцима тог типа без копирања великих блокова меморије.

Могућност постављања показивача за записе (и низове) знатно олакшава постављање компликоване структуре података као повезане листе и стабла.

тип
пНектИтем = ^ ТЛинкедЛистИтем
ТЛинкедЛистИтем = записсНаме: Стринг; иВалуе: Интегер; НектИтем: пНектИтем;
крај
;

Идеја иза повезаних листа је да нам пружи могућност да похранимо адресу на следећу повезану ставку на листи унутар поља за снимање НектИтем.

Показивачи на записе се такође могу користити, на пример, за чување прилагођених података за сваку ставку приказа стабла.

Процедурални и методски показатељи

Други важан концепт показивача у Делфима су показивачи поступака и метода.

Показивачи који упућују на адресу поступка или функције називају се процедурални показивачи. Показивачи метода су слични показивачима поступка. Међутим, уместо да указују на самосталне процедуре, морају указивати на методе класа.

Показивач методе је показивач који садржи информације о имену и објекту који се позива.

Показивачи и Виндовс АПИ

Најчешћа употреба показивача у Делпхију је повезивање са Ц и Ц ++ кодом, што укључује приступ Виндовс АПИ-ју.

Виндовс АПИ функције користе бројне типове података који могу бити непознати Делпхи програмеру. Већина параметара у позивању АПИ функција су показивачи на неки тип података. Као што је горе наведено, за позивање функција Виндовс АПИ-ја користимо низове са низом термина у Делпхију.

У многим случајевима, када АПИ позив врати вредност у међуспремнику или показивачу на структуру података, апликација мора доделити ове пуфере и структуре података пре него што се АПИ позив изврши. СХБровсеФорФолдер Виндовс АПИ функција је један од примера.

Додјела показивача и меморије

Права снага показивача долази из способности да се одложи меморија док се програм извршава.

Овај део кода требао би бити довољан да докаже да рад са показивачима није толико тежак као што би се на почетку могло чинити. Користи се за промену текста (описа) контроле са приложеном ручком.

процедура ГетТектФромХандле (хВНД: ТХандле);
вар
пТект: ПЦхар; // показивач на цхар (види горе)ТектЛен: интегер;
започети

{добили дужину текста}
ТектЛен: = ГетВиндовТектЛенгтх (хВНД);
{алоцате мемори}

ГетМем (пТект, ТектЛен); // узима показивач
{преузми текст контроле}
ГетВиндовТект (хВНД, пТект, ТектЛен + 1);
{прикажите текст}
СховМессаге (стринг (пТект))
{ослободи меморију}
ФрееМем (пТект);
крај
;
instagram story viewer