Sign in Join
Wiki copytemporary

Pointer/de

Deutsch · English · Français · Suomi · Русский

Zurück zu den Datentypen.\

===Allgemeines zu Pointern / Zeigern=== Eigenschaften eines Pointers (Zeigers):

Beispiel:\

pascal
var
   ptr1: ^Integer;  // typisiert
   ptr2: Pointer;   // untypisiert

Das Arbeiten mit typisierten Pointern ist schneller als das Arbeiten mit untypisierten Pointern.
Dafür bietet das Arbeiten mit untypisierten Pointern mehr Flexibilität, da diese nicht an einen Datentyp gebunden sind.\

Beispiel für die Verwendung eines typisierten Pointers an einem einfachen Datentyp:

pascal
var
  a, b: Integer;  // a und b sind Integer-Variablen.
  p: ^Integer;    // p ist ein Pointer, der die Speicheradresse einer Variablen vom Datentyp Integer aufnehmen kann.
begin
  a := 500;       // Die Variable a vom Datentyp Integer erhält einen gültigen Wert zugewiesen.
  p := @a;        // Die Variable p vom Datentyp Pointer erhält jetzt die Adresse der Variablen a zugewiesen.
  b := p^;        // Die Variable b vom Datentyp Integer holt sich über die Adresse im Pointer p den Wert aus der Variablen a.
  p := nil;       // Die Variable p vom Datentyp Pointer enthält jetzt keine Adresse mehr (die Variable p zeigt auf nichts).
                  // Der Pointer p kann mit einer neuen Speicheradresse versehen werden.
end;

Beispiel für die Verwendung eines typisierten Pointers an einem Record:\

pascal
type
   TNewRecord = record
      Wert1: ShortString;
      Wert2: ShortString;
      Wert3: ShortString;
   end;
var
   p: ^TNewRecord;
begin
   New(p);                      // erstellt einen Pointer und ein Object vom Typ TNewRecord.
   p^.Wert1 := 'Test';          // befüllt über den Pointer das Datenfeld des Objektes.
   p^.Wert2 := 'TestTest';      // befüllt über den Pointer das Datenfeld des Objektes.
   p^.Wert3 := 'TestTestTest';  // befüllt über den Pointer das Datenfeld des Objektes.
   Dispose(p);                  // Gibt den Pointer und damit das Objekt frei.
                                // Damit sind alle Datenfelder und Daten des Pointers p gelöscht.
end;

===Untypisierte Pointer / Zeiger=== Beispiel für die Definition eines untypisierten Pointers:\

pascal
var
   ptr2: Pointer;

Neuen Speicher anfordern und freigeben:\

pascal
begin

  ...

  GetMem(ptr2, 4);         // Integer ist 32 Bit, also 4 Byte groß
  Integer(ptr2^) := 2048;  // Wert zuweisen
  FreeMem(ptr2);           // Speicher freigeben

  ...

end;

Typisierte Pointer / Zeiger

Es gibt zum Beispiel in Free Pascal u. a. folgende vordefinierte Pointer (Zeiger):

Beispiele für die Definition eines typisierten Pointers:
Beispiel 1:

pascal
var
  ptr1: ^Integer;  // erstellt einen typisierten Zeiger für den Datentyp Integer

Neuen Speicher anfordern und freigeben:\

pascal
begin

  ...

  New(ptr1);     // fordert für den Zeiger einen Speicher an, in dem er seinen Wert speichern kann
  ptr1^ := 1;    // Weist dem angeforderten Speicher einen Wert zu
  Dispose(ptr1)  // gibt den angeforderten Speicher mit dem darin vorhanden Wert frei
                 // das heisst der Wert wird gelöscht

  ...

end;

Beispiel 2:

pascal
function funTest: string;
var
  ptrZeiger: PInteger; // von Free Pascal vordefinierter Zeiger für den Datentyp Integer
  {
   alternativ geht für 
   die Schreibweise ptrZeiger: PInteger;
   die Schreibweise ptrZeiger: ^integer;
  } 
  intZahl: Integer; // definiert den Speicherort (Variable) für einen Integer Wert

begin

  result:= '';
  intZahl := 4;  // Weist der Variablen einen Wert zu

  ptrZeiger := @intZahl; // Weist dem Zeiger die Adresse der Variablen zu
  result := Inttostr(ptrZeiger^); // Der Zeiger übergibt den Wert der Variablen der Funktion

end;

From the Free Pascal wiki, page "Pointer/de", as it stood on 2020-02-23 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.