Pointers til Søren Klit Lambæk

Tags:    programmering

<< < 12 > >>
Hej..
Hvad er egentlig formålet med pointers, og hvorfor er de gode at have?
Altså hvad er smart ved dem? Der er jo ikke noget smart, ved at den "bare" peger på en adresse i hukommelsen :S

Med Venlig Hilsen: CHadi




Det jeg mener, er ClipBoard :D
Du ved, når man kopier noget, kommer det ned i clipBoard, så man bagefter kan vise det igen...
Vi skriver jo også til en kopi funktion: Richedit1.CopyToClipboard; .. forstår du?
Med Venlig Hilsen: CHadi




procedure TForm1.FormCreate(Sender: TObject);
var
S1, S2 : string;
P1 : ^string;
P2 : Pointer;
begin
S1 := 'Chadi';

//Defineret pointer
P1 := @S1;
S2 := P1^; //Peger til S1 - Ingen kopiering!!!

ShowMessage(S2+' Defineret Pointer');

//Udefinert pointer
P2 := @S1;
S2 := String(P2^);

ShowMessage(S2+' Udefineret Pointer');
end;



Med udefinerede pointers kan du pege til alle former for pointers. Det er ikke særligt svært. Der hvordet bliver tricky er når du skal hive dataerne frem igen. Skal du vide hvad det er for en slags data der er blevet henvist til S2 := String(P2^). Hvis du har mange procedure og en masse kode, kan det godt forvrre lidt!



Vend dig til at bruge pointers, også til små appliktioner. Det vil gavne dig i længden! :) Held og lykke.



Tak for din gode forklaring!
Jeg vil prøve at se, hvordan jeg kan bruge dem! :)
Med Venlig Hilsen: CHadi




Hejsa... Pointers indeholder adresser til data i din computers RAM. Der findes udefinerede pointers som ganske enkelt hedder pointer. Og så er der definerede pointers til varianter, konstanter og typer. Formålet med pointers er at gøre dine applikationer neget hurtigere og mere effektive. Specielt, hvis du arbejder med meget data og skal bruge det samme data til forsklellige procedure, komponenter eller applikationer kan du bruge pointers til at pege, i stedet for at kopiere dataerne.

procedure TForm1.FormCreate(Sender: TObject);
var
S1, S2 : string;
P : ^string;
begin
S1 := 'Chadi';
S2 := S1; //Kopier data (Fylder dobbelt saa meger i Ramen)

ShowMessage(S1+' Kopiert');

P := @S1;
S2 := P^; //Peger til S1 - Ingen kopiering!!!

ShowMessage(S1+' Pointer');
end;

Hej,

I dit eks. kopierer du faktisk data i begge linier :
S2 := S1; //Kopier data (Fylder dobbelt saa meger i Ramen)
S2 := P^; //Peger til S1 - Ingen kopiering!!!
Det vil sige at når du dereferere P (altså P^) så tager du indholdet af de data som P peger på og kopiere dem over i S2.

Hvis du der i mod bruger P direkte i ShowMessage, og undlader at sætte S2 := P^, så bliver data ikke kopieret.
Fold kodeboks ind/udKode 


En anden grund til at ha' pointere er at du allokere variabler i stedet for at de skal oprettes statisk:
Fold kodeboks ind/udKode 

For det ville være ganske irriterende at skulle oprette alle variabler i starten af din unit og det ville ikke være muligt at ha' variabel størrelse variabler.

Pointere giver dig uendelige muligheder for at manipulere dine data samt giver dig en mere dynamisk måde at bygge din kode op på.

/Michael.


[Redigeret d. 21/11-03 00:13:20 af Michael Skovslund]



<< < 12 > >>
t