Padomu izpratne un lietošana Delfos

Kaut arī norādes nav tik svarīgas Delfi kā tie atrodas C vai C ++, tie ir tik "pamata" rīks, ka gandrīz visam ar tiem ir sakars programmēšana kaut kādā veidā jātiek galā ar norādēm.

Šī iemesla dēļ jūs varētu izlasīt par to, kā virkne vai objekts patiešām ir tikai rādītājs, vai arī, ka notikumu apstrādātājs, piemēram, OnClick, faktiski ir procedūras rādītājs.

Norādītājs uz datu tipu

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

Lai konkretizētu šo definīciju, paturiet prātā, ka viss, ko lieto programma, tiek glabāts kaut kur datora atmiņā. Tā kā rādītājam ir cita mainīgā adrese, tiek teikts, ka tas norāda uz šo mainīgo.

Lielākoties Delphi norādes norāda uz konkrētu tipu:

var
iValue, j: vesels skaitlis; pIntValue: ^ vesels skaitlis;
sākt
iValue: = 2001; pIntValue: = @iValue;... j: = pIntValue ^;
beigas
;

sintakse rādītāja datu veida deklarēšanai izmanto a caret (^). Iepriekš minētajā kodā iValue ir vesels skaitlis tipa mainīgais, un pIntValue ir vesels skaitlis tipa rādītājs. Tā kā rādītājs nav nekas cits kā adrese atmiņā, mums tam jāpiešķir vērtības (iValue) veselā skaitļa mainīgajā vietā atrašanās vieta (adrese).

instagram viewer

@ operators atgriež mainīgā adresi (vai funkciju vai procedūru, kā būs redzams zemāk). Līdzvērtīgs @ 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 pēc iespējas vairāk izmantot drukātās norādes. Rādītāja datu tips ir vispārējs rādītāja tips; tas ir rādītājs visiem datiem.

Ņemiet vērā: ja aiz rādītāja mainīgā parādās “^”, tas novirza uz rādītāju; tas ir, tas atgriež vērtību, kas saglabāta uz atmiņas adresi, kuru tur rādītājs. Šajā piemērā mainīgajam j ir tāda pati vērtība kā iValue. Varētu šķist, ka tam nav jēgas, kad mēs varam vienkārši piešķirt iValue vērtībai j, taču šis koda fragments slēpjas aiz vairuma zvanu uz Win API.

NĪL norādījumi

Nepiešķirtie rādītāji ir bīstami. Tā kā norādes ļauj mums strādāt tieši ar datora atmiņu, ja mēs (kļūdas dēļ) mēģinām rakstīt uz aizsargātu vietu atmiņā, mēs varētu 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 NIL.

NIL ir īpaša konstante, kuru var piešķirt jebkuram rādītājam. Ja rādītājam ir piešķirts nulle, rādītājs neko nenorāda. Delfi, piemēram, uzrāda tukšu dinamiskais masīvs vai garu virkni kā nulles rādītāju.

Rakstzīmju rādītāji

Pamata tipi PAnsiChar un PWideChar apzīmē AnsiChar un WideChar vērtību norādes. Vispārīgais PChar apzīmē rādītāju Char mainīgajam.

Šīs rakstzīmju norādes tiek izmantotas, lai manipulētu ar nulles spēku stīgas. Padomājiet par PChar kā rādītāju, kas norāda virkni, kurai nav gala, vai masīvu, kas to attēlo.

Norādes uz ierakstiem

Kad mēs definējam ierakstu vai citu datu tipu, tā parasti ir arī tāda rādītāja noteikšana. Tas ļauj viegli manipulēt ar tipa gadījumiem, nekopējot lielus atmiņas blokus.

Iespēja ievietot norādes ierakstiem (un masīviem) ļauj daudz vieglāk izveidot sarežģītas datu struktūras kā saistītus sarakstus un kokus.

tips
pNextItem = ^ TLinkedListItem
TLinkedListItem = ierakstssName: stīga; iValue: vesels skaitlis; NextItem: pNextItem;
beigas
;

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

Norādes uz ierakstiem var izmantot arī, piemēram, saglabājot pielāgotos 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ūras un metodes rādītāji.

Rādītājus, kas norāda uz procedūras vai funkcijas adresi, sauc par procedūras rādītājiem. Metodes norādes ir līdzīgas procedūras 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 vārdu, gan objektu, uz kuru tiek izsaukts.

Norādes un Windows API

Delfos rādītājus visbiežāk izmanto, saskaroties 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 nepazīstami. Lielākā daļa API funkciju izsaukšanas parametru ir norādes uz kādu datu tipu. Kā minēts iepriekš, zvanot uz Windows API funkcijām, Delphi mēs izmantojam nulles virknes.

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

Rādītāja un atmiņas sadalījums

Patiesais rādītāju spēks nāk no spējas atcelt atmiņu programmas izpildes laikā.

Ar šo koda daļu vajadzētu būt pietiekamam, lai pierādītu, ka darbs ar norādēm nav tik grūti, kā sākumā varētu šķist. To izmanto, lai ar pievienoto rokturi mainītu vadības ierīces tekstu (parakstus).

procedūra GetTextFromHandle (hWND: THandle);
var
pTeksts: PChar; // rādītājs uz char (skat. iepriekš)TextLen: vesels skaitlis;
sākt

{iegūt teksta garumu}
TextLen: = GetWindowTextLength (hWND);
{alokatē atmiņu}

GetMem (pText, TextLen); // ņem rādītāju
{saņemt vadības tekstu}
GetWindowText (hWND, pText, TextLen + 1);
{parādīt tekstu}
ShowMessage (virkne (pText))
{atbrīvojiet atmiņu}
FreeMem (pText);
beigas
;
instagram story viewer