Rodyklės supratimas ir naudojimas Delphi

Kompiuterio programavimo iliustracija

elenabs / Getty Images





Net jei rodyklės nėra tokios svarbios Delphi kaip jie yra C arba C++ , jie yra toks „pagrindinis“ įrankis, su kuriuo beveik viskas susiję programavimas turi tam tikru būdu elgtis su rodyklėmis.

Dėl šios priežasties galite perskaityti, kaip eilutė ar objektas iš tikrųjų yra tik žymeklis arba kad įvykių tvarkytuvas, pvz., OnClick, iš tikrųjų yra procedūros žymeklis.



Rodyklė į duomenų tipą

Paprasčiau tariant, rodyklė yra kintamasis, turintis bet kokio atmintyje esančio adreso.

Norėdami konkretizuoti šį apibrėžimą, atminkite, kad viskas, ką naudoja programa, yra saugoma kažkur kompiuterio atmintyje. Kadangi žymeklis turi kito kintamojo adresą, sakoma, kad jis nurodo tą kintamąjį.



Dažniausiai Delphi rodyklės nurodo konkretų tipą:

|_+_|

The sintaksė žymeklio duomenų tipui deklaruoti naudojamas a rūpestis (^) . Anksčiau pateiktame kode iValue yra sveikojo skaičiaus kintamasis, o pIntValue yra sveikojo skaičiaus tipo rodyklė. Kadangi rodyklė yra ne kas kita, kaip adresas atmintyje, turime jam priskirti iValue sveikojo skaičiaus kintamajame saugomos reikšmės vietą (adresą).

The @ operatorius grąžina kintamojo (arba funkcijos ar procedūros, kaip bus parodyta toliau) adresą. Tai atitinka @ operatorių Adr funkcija . Atminkite, kad pIntValue reikšmė nėra 2001.

Šiame pavyzdiniame kode pIntValue yra įvestas sveikasis skaičius. Geras programavimo stilius yra naudoti įvestas rodykles, kiek galite. Rodyklės duomenų tipas yra bendras rodyklės tipas; tai žymeklis į bet kokius duomenis.



Atkreipkite dėmesį, kad kai „^“ pasirodo po žymeklio kintamojo, jis panaikina nuorodas į žymeklį; tai yra, jis grąžina reikšmę, saugomą žymeklio laikomu atminties adresu. Šiame pavyzdyje kintamasis j turi tokią pačią reikšmę kaip ir iValue. Gali atrodyti, kad tai neturi tikslo, kai galime tiesiog priskirti „iValue“ prie j, tačiau ši kodo dalis slypi už daugelio „Win API“ iškvietimų.

NILing rodyklės

Nepriskirti rodyklės yra pavojingos. Kadangi rodyklės leidžia tiesiogiai dirbti su kompiuterio atmintimi, jei bandysime (per klaidą) įrašyti į saugomą vietą atmintyje, galime gauti prieigos pažeidimo klaidą. Dėl šios priežasties visada turėtume inicijuoti žymeklį į NIL.



NIL yra speciali konstanta, kurią galima priskirti bet kokiai žymekliui. Kai žymekliui priskiriamas nulis, rodyklė nieko nenurodo. Delphi pateikia, pavyzdžiui, tuščią

Simbolių rodyklės

Pagrindiniai tipai PAnsiChar ir PWideChar rodo nuorodas į AnsiChar ir WideChar reikšmes. Bendrasis PChar reiškia žymeklį į Char kintamąjį.

Šios simbolių rodyklės naudojamos manipuliuoti su nuliniu terminu stygos. Pagalvokite apie PChar kaip rodyklę į nulinę eilutę arba į masyvą, kuris ją reiškia.



Rodyklės į įrašus

Kai apibrėžiame įrašą ar kitą duomenų tipą, įprasta apibrėžti ir to tipo žymeklį. Tai leidžia lengvai manipuliuoti tokio tipo egzemplioriais nekopijuojant didelių atminties blokų.

Galimybė turėti rodyklių į įrašus (ir masyvus) leidžia daug lengviau nustatyti sudėtingas duomenų struktūras kaip susietus sąrašus ir medžius.



|_+_|

Susietų sąrašų idėja yra suteikti mums galimybę išsaugoti kito susieto elemento adresą sąraše NextItem įrašo lauke.

Rodyklės į įrašus taip pat gali būti naudojamos, kai, pavyzdžiui, saugomi kiekvieno medžio rodinio elemento pasirinktiniai duomenys.

Procedūrų ir metodų rodyklės

Kita svarbi „Delphi“ rodyklės koncepcija yra procedūrų ir metodų rodyklės.

Rodyklės, nukreipiančios į procedūros ar funkcijos adresą, vadinamos procedūrinėmis rodyklėmis. Metodų rodyklės yra panašios į procedūrų nuorodas. Tačiau užuot nukreipę į atskiras procedūras, jie turi nurodyti klasės metodus.

Metodo žymeklis yra rodyklė, kurioje yra informacijos apie pavadinimą ir objektą, kuris iškviečiamas.

Rodyklės ir Windows API

Dažniausiai „Delphi“ rodyklės naudojamos sąsajoje su C ir C++ kodais, įskaitant prieigą prie „Windows API“.

Windows API funkcijos naudoja daugybę duomenų tipų, kurie Delphi programuotojui gali būti nepažįstami. Dauguma iškviečiamų API funkcijų parametrų yra tam tikro tipo duomenų rodyklės. Kaip minėta pirmiau, iškviesdami „Windows API“ funkcijas „Delphi“ naudojame nulinio termino eilutes.

Daugeliu atvejų, kai API iškvietimas grąžina reikšmę buferyje arba rodyklėje į duomenų struktūrą, šiuos buferius ir duomenų struktūras turi paskirstyti programa prieš iškvietus API. Vienas iš pavyzdžių yra SHBrowseForFolder Windows API funkcija.

Rodyklė ir atminties paskirstymas

Tikroji rodyklių galia atsiranda dėl galimybės atidėti atmintį, kol programa vykdoma.

Šios kodo dalies turėtų pakakti įrodyti, kad dirbti su rodyklėmis nėra taip sunku, kaip gali pasirodyti iš pradžių. Jis naudojamas norint pakeisti valdiklio tekstą (antraštę) su pateikta rankena.

|_+_|