Rādītāju izpratne un izmantošana Delphi

Datorprogrammēšanas ilustrācija

elenabs/Getty Images





Pat ja norādes nav tik svarīgas Delfos kā tie ir C vai C++ , tie ir tik 'pamata' rīks, ar kuru gandrīz viss ir saistīts programmēšana kaut kādā veidā jātiek galā ar norādēm.

Šī iemesla dēļ jūs varētu lasīt par to, kā virkne vai objekts patiesībā ir tikai rādītājs vai ka notikumu apstrādātājs, piemēram, OnClick, patiesībā ir rādītājs uz procedūru.



Rādītājs uz datu tipu

Vienkārši sakot, rādītājs ir mainīgais, kas glabā visu atmiņā esošo adresi.

Lai precizētu šo definīciju, paturiet prātā, ka viss, ko izmanto lietojumprogramma, tiek saglabāts kaut kur datora atmiņā. Tā kā rādītājs satur cita mainīgā adresi, tiek teikts, ka tas norāda uz šo mainīgo.



Lielāko daļu laika Delphi norādes norāda uz noteiktu veidu:

|_+_|

The sintakse rādītāja datu tipa deklarēšanai izmanto a rūpīte (^) . Iepriekš minētajā kodā iValue ir vesela skaitļa tipa mainīgais un pIntValue ir vesela skaitļa tipa rādītājs. Tā kā rādītājs ir nekas vairāk kā adrese atmiņā, mums tai ir jāpiešķir iValue veselā skaitļa mainīgajā saglabātās vērtības atrašanās vieta (adrese).

The @ operators atgriež mainīgā (vai funkcijas vai procedūras adresi, kā tas būs redzams tālāk). Ekvivalents @ operatoram ir Addr funkcija . Ņemiet vērā, ka pIntValue vērtība nav 2001.

Šajā parauga kodā pIntValue ir drukāts vesela skaitļa rādītājs. Labs programmēšanas stils ir izmantot drukātas norādes, cik vien iespējams. Rādītāja datu tips ir vispārīgs rādītāja veids; tas ir rādītājs uz jebkuriem datiem.



Ņemiet vērā: ja '^' parādās aiz rādītāja mainīgā, tas atceļ atsauci uz rādītāju; tas ir, tas atgriež vērtību, kas saglabāta rādītāja turētajā atmiņas adresē. Šajā piemērā mainīgajam j ir tāda pati vērtība kā iValue. Varētu šķist, ka tam nav nozīmes, ja mēs varam vienkārši piešķirt iValue j, taču šī koda daļa slēpjas aiz lielākās daļas Win API izsaukumu.

NILing norādes

Nepiešķirtas norādes ir bīstamas. Tā kā norādes ļauj mums strādāt tieši ar datora atmiņu, ja mēģināsim (kļūdoties) rakstīt uz aizsargātu vietu atmiņā, mēs varam iegūt piekļuves pārkāpuma kļūdu. Tas ir iemesls, kāpēc mums vienmēr vajadzētu inicializēt rādītāju uz NIL.



NIL ir īpaša konstante, ko var piešķirt jebkuram rādītājam. Ja rādītājam ir piešķirts nulle, rādītājs ne uz ko neatsaucas. Delphi uzrāda, piemēram, tukšu

Rakstzīmju norādes

Pamattipi PAnsiChar un PWideChar ir norādes uz AnsiChar un WideChar vērtībām. Vispārīgais PChar ir rādītājs uz Char mainīgo.

Šīs rakstzīmju norādes tiek izmantotas, lai manipulētu ar nulles beigām stīgas. Iedomājieties, ka PChar ir rādītājs uz nulles gala virkni vai masīvu, kas to apzīmē.



Norādes uz ierakstiem

Kad mēs definējam ierakstu vai citu datu tipu, parasti tiek definēts arī rādītājs uz šo tipu. Tādējādi ir viegli manipulēt ar šāda veida gadījumiem, nekopējot lielus atmiņas blokus.

Iespēja izmantot norādes uz ierakstiem (un masīviem) ievērojami atvieglo sarežģītu datu struktūru kā saistītu sarakstu un koku iestatīšanu.



|_+_|

Saistīto sarakstu ideja ir sniegt mums iespēju saglabāt nākamā saistītā vienuma adresi sarakstā NextItem ieraksta laukā.

Norādes uz ierakstiem var izmantot arī, piemēram, saglabājot pielāgotus datus katram koka skata vienumam.

Procedūru un metožu norādes

Vēl viens svarīgs rādītāja jēdziens Delphi ir procedūru un metožu norādes.

Rādītājus, kas norāda uz procedūras vai funkcijas adresi, sauc par procesuālajām norādēm. Metožu norādes ir līdzīgas procedūru norādēm. Tomēr tā vietā, lai norādītu uz atsevišķām procedūrām, tām jānorāda uz klases metodēm.

Metodes rādītājs ir rādītājs, kas satur informāciju gan par nosaukumu, gan objektu, kas tiek izsaukts.

Norādes un Windows API

Visizplatītākais norādes lietojums Delphi ir saskarne ar C un C++ kodu, kas ietver piekļuvi Windows API.

Windows API funkcijas izmanto vairākus datu tipus, kas Delphi programmētājam varētu būt sveši. Lielākā daļa API funkciju izsaukšanas parametru ir norādes uz kādu datu tipu. Kā minēts iepriekš, Delphi, izsaucot Windows API funkcijas, mēs izmantojam nulles gala virknes.

Daudzos gadījumos, kad API izsaukums atgriež vērtību buferī vai rādītājā uz datu struktūru, šie buferi un datu struktūras lietojumprogrammai ir jāpiešķir pirms API izsaukuma. Viens piemērs ir SHBrowseForFolder Windows API funkcija.

Rādītāja un atmiņas piešķiršana

Patiesais norādes spēks izriet no spējas atlikt atmiņu programmas izpildes laikā.

Ar šo koda daļu vajadzētu pietikt, lai pierādītu, ka darbs ar norādes nav tik grūts, kā varētu šķist sākumā. To izmanto, lai mainītu vadīklas tekstu (parakstu), izmantojot nodrošināto rokturi.

|_+_|