Razumevanje in uporaba kazalcev v Delphiju

Ilustracija računalniškega programiranja

elenabs/Getty Images





Čeprav kazalci niso tako pomembni pri Delphi kot so v C oz C++ , so tako 'osnovno' orodje, s katerim je skoraj vse povezano programiranje se mora na nek način ukvarjati s kazalci.

Iz tega razloga lahko berete o tem, da je niz ali predmet v resnici le kazalec ali da je obravnavalec dogodkov, kot je OnClick, dejansko kazalec na proceduro.



Kazalec na vrsto podatkov

Preprosto povedano, kazalec je spremenljivka, ki vsebuje naslov česar koli v pomnilniku.

Za konkretizacijo te definicije ne pozabite, da je vse, kar uporablja aplikacija, shranjeno nekje v pomnilniku računalnika. Ker kazalec vsebuje naslov druge spremenljivke, se reče, da kaže na to spremenljivko.



Večino časa kazalci v Delphiju kažejo na določen tip:

|_+_|

The sintaksa za deklaracijo podatkovnega tipa kazalec uporablja a kazalka (^) . V zgornji kodi je iValue spremenljivka tipa celega števila, pIntValue pa kazalec tipa celega števila. Ker kazalec ni nič drugega kot naslov v pomnilniku, mu moramo dodeliti lokacijo (naslov) vrednosti, shranjene v celoštevilski spremenljivki iValue.

The @ operater vrne naslov spremenljivke (ali funkcije ali postopka, kot bo prikazano spodaj). Enakovredno operatorju @ je Funkcija Addr . Upoštevajte, da vrednost pIntValue ni 2001.

V tej vzorčni kodi je pIntValue vtipkani celoštevilski kazalec. Dober stil programiranja je uporaba vnesenih kazalcev čim več. Podatkovni tip Kazalec je splošen tip kazalca; predstavlja kazalec na kateri koli podatek.



Upoštevajte, da ko se '^' pojavi za spremenljivko kazalca, odstrani sklic na kazalec; to pomeni, da vrne vrednost, shranjeno na pomnilniškem naslovu, ki ga ima kazalec. V tem primeru ima spremenljivka j enako vrednost kot iValue. Morda je videti, kot da to nima namena, ko lahko iValue preprosto dodelimo j, vendar ta del kode stoji za večino klicev API-ju Win.

NILing kazalci

Nedodeljeni kazalci so nevarni. Ker nam kazalci omogočajo neposredno delo s pomnilnikom računalnika, lahko, če poskušamo (po pomoti) pisati na zaščiteno lokacijo v pomnilniku, dobimo napako kršitve dostopa. To je razlog, da bi morali vedno inicializirati kazalec na NIL.



NIL je posebna konstanta, ki jo je mogoče dodeliti kateremu koli kazalcu. Ko je kazalcu dodeljena nič, se kazalec ne sklicuje na nič. Delphi predstavlja na primer prazno

Kazalci znakov

Osnovna tipa PAnsiChar in PWideChar predstavljata kazalce na vrednosti AnsiChar in WideChar. Generični PChar predstavlja kazalec na spremenljivko Char.

Ti kazalci znakov se uporabljajo za manipulacijo zaključenih z ničelnimi znaki strune. Predstavljajte si PChar kot kazalec na niz z ničlo ali na matriko, ki ga predstavlja.



Kazalci na zapise

Ko definiramo zapis ali drug podatkovni tip, je običajna praksa tudi definiranje kazalca na ta tip. To olajša manipulacijo primerkov vrste brez kopiranja velikih blokov pomnilnika.

Možnost kazalcev na zapise (in nize) olajša nastavitev zapletenih podatkovnih struktur kot povezanih seznamov in dreves.



|_+_|

Ideja za povezanimi seznami je, da nam omogočijo shranjevanje naslova naslednjega povezanega elementa na seznamu znotraj polja zapisa NextItem.

Kazalce na zapise je mogoče uporabiti tudi pri shranjevanju podatkov po meri za vsako postavko drevesnega pogleda, na primer.

Kazalci postopkov in metod

Drug pomemben koncept kazalcev v Delphiju so kazalci postopkov in metod.

Kazalci, ki kažejo na naslov procedure ali funkcije, se imenujejo proceduralni kazalci. Kazalci metod so podobni kazalcem postopkov. Vendar pa morajo namesto na samostojne procedure kazati na metode razreda.

Kazalec metode je kazalec, ki vsebuje informacije o imenu in predmetu, ki se kliče.

Kazalci in Windows API

Najpogostejša uporaba kazalcev v Delphiju je povezovanje s kodo C in C++, kar vključuje dostop do Windows API.

Windows Funkcije API-ja uporabljajo številne tipe podatkov, ki programerju Delphi morda niso znani. Večina parametrov pri klicanju funkcij API-ja je kazalcev na neko vrsto podatkov. Kot je navedeno zgoraj, v Delphiju uporabljamo nize z ničelnimi zaključki, ko kličemo funkcije Windows API.

V mnogih primerih, ko klic API-ja vrne vrednost v medpomnilniku ali kazalcu na podatkovno strukturo, mora aplikacija dodeliti te medpomnilnike in podatkovne strukture, preden se izvede klic API-ja. Funkcija SHBrowseForFolder Windows API je en primer.

Kazalec in dodelitev pomnilnika

Resnična moč kazalcev izhaja iz zmožnosti, da med izvajanjem programa odložite pomnilnik.

Ta del kode bi moral biti dovolj, da dokaže, da delo s kazalci ni tako težko, kot se zdi na prvi pogled. Uporablja se za spreminjanje besedila (napisa) kontrolnika s priloženim ročajem.

|_+_|