Einzelnen Beitrag anzeigen

mr_emre_d
(Gast)

n/a Beiträge
 
#5

Re: Pionter - ein schwarzes Tuch

  Alt 13. Feb 2009, 15:04
Du musst es dereferenzieren

Ein ganz simples Pointer HowTo
Delphi-Quellcode:
{
Grundlegende Sachen zu Pointern:
  o Pointer belegen immer 4 Bytes
  o Pointer beinhalten die Adresse zur "hingepointetten"(hingezeigten) Variable und natürlich die eigene Adresse (sowie alle anderen Typen)
  o Es gibt 2 verschiedene Pointertypen:
    a) typisierte Pointer (bsp "PInteger") // so nenne ich sie mal .. da gibts sicher andere Begriffe dafür - ist mir aber jetzt wurscht
    b) untypisierte Pointer ("Pointer")
  o a Pointer können direkt dereferenziert werden wohingegen
  o b Pointer gecastet werden müssen
}

// -- A.)
var
  X: Integer;
  P: PInteger; // Pointer auf einen Integer !
...
// Adressen sind zum Demonstrationszweck frei gewählt !

X := 12345; // Adresse von X - $00ABCDEF; Wert von X = 12345
P := @X; // Adresse von P - $00FEEFEE; Wert von P = $00ABCDEF

// jetzt zeigt unser Pointer P auf X
// wenn wir nun die Werte verändern wollen "dereferenzieren" wir es wie folgt

P^ := 54321; // Adresse von P - $00FEDCAB; Wert von P = $00ABCDEF
// der Wert & die Adresse haben sich nicht geändert
// da wir sie aber dereferenziert haben, haben wir somit auf X zugegriffen:
// X hat jetzt den Wert 54321!

// -- B.)
var
  PInt: Pointer;
...
  PInt := @X;
  Integer( PInt^ ) := 113245;
Ich garantiere keine 100% Korrektheit
  Mit Zitat antworten Zitat