Difference between revisions of "Pointer/de"

From Free Pascal wiki
Jump to navigationJump to search
m
m
Line 3: Line 3:
 
Zurück zu den [[Data type/de|Datentypen]].<br>
 
Zurück zu den [[Data type/de|Datentypen]].<br>
 
<br>
 
<br>
 +
__TOC__
 +
<br>
 +
===Allgemeines zu Pointern / Zeigern===
 
Eigenschaften eines Pointers (Zeigers):
 
Eigenschaften eines Pointers (Zeigers):
 
* Ein Pointer ist ein Zeiger (eine Referenz) auf eine Speicherstelle.<br>
 
* Ein Pointer ist ein Zeiger (eine Referenz) auf eine Speicherstelle.<br>
Line 10: Line 13:
 
* Die genaue Größe des Pointers (Zeigers) ist abhängig vom Zielbetriebssystem und dem Zielprozessor.<br>
 
* Die genaue Größe des Pointers (Zeigers) ist abhängig vom Zielbetriebssystem und dem Zielprozessor.<br>
 
<br>
 
<br>
Es gibt zwei Typen von Pointern: typisierte und untypisierte.<br>
+
Beispiel:<br>
Beispiel:
 
 
<syntaxhighlight>
 
<syntaxhighlight>
 
var
 
var
   p1: ^Integer;  // typisiert
+
   ptr1: ^Integer;  // typisiert
   p2: Pointer;  // untypisiert
+
   ptr2: Pointer;  // untypisiert
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Das Arbeiten mit typisierten Pointern ist schneller als das Arbeiten mit untypisierten Pointern.<br>
 
Das Arbeiten mit typisierten Pointern ist schneller als das Arbeiten mit untypisierten Pointern.<br>
Line 51: Line 53:
 
   Dispose(p);                  // Gibt den Pointer und damit das Objekt frei.
 
   Dispose(p);                  // Gibt den Pointer und damit das Objekt frei.
 
                                 // Damit sind alle Datenfelder und Daten des Pointers p gelöscht.
 
                                 // Damit sind alle Datenfelder und Daten des Pointers p gelöscht.
 +
end;
 +
</syntaxhighlight>
 +
<br>
 +
===Untypisierte Pointer / Zeiger===
 +
Beispiel für die Definition eines untypisierten Pointers:<br>
 +
<syntaxhighlight>
 +
var
 +
  ptr2: Pointer;
 +
</syntaxhighlight>
 +
<br>
 +
Neuen Speicher anfordern und freigeben:<br>
 +
<syntaxhighlight>
 +
begin
 +
 +
  ...
 +
 +
  GetMem(ptr2,4);          // Integer ist 32 Bit, also 4 Byte groß
 +
  Integer(ptr2^) := 2048;  // Wert zuweisen
 +
  FreeMem(ptr2);          // Speicher freigeben
 +
 +
  ...
 +
 +
end;
 +
</syntaxhighlight>
 +
 +
 +
===Typisierte Pointer / Zeiger===
 +
Beispiel für die Definition eines typisierten Pointers:<br>
 +
<syntaxhighlight>
 +
var
 +
  ptr1: ^Integer;  // typisiert
 +
</syntaxhighlight>
 +
<br>
 +
Neuen Speicher anfordern und freigeben:<br>
 +
<syntaxhighlight>
 +
begin
 +
 +
  ...
 +
 +
  New(ptr1);    // Speicher anfordern
 +
  ptr1^ := 1;    // Wert zuweisen
 +
  Dispose(ptr1)  // Speicher freigeben
 +
 +
  ...
 +
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>

Revision as of 13:26, 29 May 2013

Deutsch (de) English (en) suomi (fi) français (fr) русский (ru)

Zurück zu den Datentypen.


Allgemeines zu Pointern / Zeigern

Eigenschaften eines Pointers (Zeigers):

  • Ein Pointer ist ein Zeiger (eine Referenz) auf eine Speicherstelle.
  • Ein Pointer ist ein ganzzahliger Datentyp zum Speichern einer Arbeitsspeicheradresse.
  • Ein Pointer verweist auf die Anfangsadresse einer Variablen oder eines Objektes.
  • Die Größe des Pointers ist entweder Longint oder Int64.
  • Die genaue Größe des Pointers (Zeigers) ist abhängig vom Zielbetriebssystem und dem Zielprozessor.


Beispiel:

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:

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:

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:

var
   ptr2: Pointer;


Neuen Speicher anfordern und freigeben:

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

Beispiel für die Definition eines typisierten Pointers:

var
  ptr1: ^Integer;  // typisiert


Neuen Speicher anfordern und freigeben:

begin

  ...

  New(ptr1);     // Speicher anfordern
  ptr1^ := 1;    // Wert zuweisen
  Dispose(ptr1)  // Speicher freigeben

  ...

end;



--Olaf 17:12, 4 October 2012 (UTC)