Pointeri - un subiect destul de dificil pentru un începător, iar aplicațiile Delphi pot fi create.
da și nu este foarte familiarizat cu ea. Dar, pe măsură ce se dezvoltă, pointerii pot deveni unul dintre cele mai puternice instrumente de programare disponibile în
PInt = ^ Integer; // PInt - indicatorul pentru Integer
Foo = înregistrare // Tip - înregistrare
PFoo = ^ Foo; // PFoo este un pointer la un obiect tip foo
Programatorii din C ++ pot observa asemănarea operatorului ^ Object Pascal și operatorul * limbajului C ++. Tipul de Pointer din Object Pascal corespunde tipului de void * din C.
Atunci când indicatorul nu indică nimic (valoarea lui este 0), atunci un astfel de pointer este declarat Nul, iar pointerul este numit un pointer nul.
Dacă aveți nevoie să accesați datele la care indicatorul indică, puteți utiliza operatorul ^ urmând numele acestei variabile. Această metodă se numește dereferencing, precum și acces indirect. luând valori. dereferență și referință. Mai jos este un exemplu de lucru cu pointeri.
Nou (Rec); // Selectați memoria pentru înregistrarea nouă Rec
Rec. I: = 10; / / Introduceți datele în el. Fiți atenți
Rec ^ .S: = 'Și acum pentru ceva complet diferit';
Aruncați (Rec); // Nu uitați să eliberați memoria!
Când utilizați funcția Nou ()
Funcția New () este utilizată atunci când se alocă memorie pentru un pointer unei structuri de date cu dimensiuni cunoscute. Deoarece compilatorul cunoaște dimensiunea structurii pentru care trebuie să alocați memorie, funcția New () va aloca suficiente octeți, care sunt mai sigure și mai sigure decât apelarea GetMem () sau AllocMem () . În același timp, nu utilizați niciodată funcția New () pentru alocarea memoriei pentru tipurile Pointer sau PChar, deoarece în acest caz compilatorul nu știe cât trebuie alocată memoria. Și nu uitați să utilizați funcția Dispose () pentru a elibera memoria alocată funcției New ().
Pentru a aloca memorie structurilor a căror dimensiune la momentul compilării nu este încă
Sunt utilizate funcțiile GetMem () și AllocMem (). De exemplu, compilatorul nu poate determina în prealabil cantitatea de memorie pe care o va aloca pentru structurile specificate de variabile precum PChar sau Pointer, ceea ce este legat de natura însăși a acestui tip de date. Cel mai important lucru nu este să încercați să manipulați cantitatea de memorie care este mai mare decât cea reală, deoarece rezultatul cel mai probabil al acestor acțiuni este o eroare de încălcare a accesului. Pentru a elibera memoria alocată funcțiilor de mai sus, utilizați funcția FreeMem (). Apropo, pentru alocarea memoriei este mai bine să folosiți funcția Al-locMem (), deoarece întotdeauna inițializează memoria alocată cu valori zero.
Un aspect al colaborării cu indicii din Object Pascal, care diferă semnificativ de lucrul cu ei în C, este cea mai strictă tipizare a acestora. Deci, în exemplul de mai jos, variabilele a și b nu sunt compatibile cu tipul.
În același timp, într-o descriere echivalentă în C, aceste variabile sunt complet
PtrInteger = ^ Integer; // Creați un tip denumit
a, b: PtrInteger; // Acum a și b sunt compatibile după tip