Difference between revisions of "Pointer/de"

From Lazarus wiki
Jump to navigationJump to search
Line 5: Line 5:
 
* Ein Pointer ist ein ganzzahliger Datentyp zum speichern einer Arbeisspeicheradresse.<br>
 
* Ein Pointer ist ein ganzzahliger Datentyp zum speichern einer Arbeisspeicheradresse.<br>
 
* Ein Pointer verweist auf die Anfangsadresse einer Variablen oder eines Objektes.<br>
 
* Ein Pointer verweist auf die Anfangsadresse einer Variablen oder eines Objektes.<br>
* Die Größe des Pointers liegt zwischen Longint oder Int64 .<br>
+
* Die Größe des Pointers ist entweder Longint oder Int64 .<br>
* Die genaue Größe des 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>
 
Es gibt zwei Typen von Pointern typisierte und untypisierte.<br>
Line 41: Line 41:
 
var
 
var
 
   p: ^TNewRecord;
 
   p: ^TNewRecord;
  i, j: integer;
 
 
begin
 
begin
 
   New(p);                      // erstellt einen Pointer und ein Object vom Typ TNewRecord.
 
   New(p);                      // erstellt einen Pointer und ein Object vom Typ TNewRecord.

Revision as of 19:01, 10 September 2012

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


Eigenschaften eines Pointers (Zeigers):

  • Ein Pointer ist ein Zeiger (eine Referenz) auf eine Speicherstelle.
  • Ein Pointer ist ein ganzzahliger Datentyp zum speichern einer Arbeisspeicheradresse.
  • 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.


Es gibt zwei Typen von Pointern typisierte und untypisierte.
Beispiel:

var
   p1: ^Integer;  // typisiert
   p2: Pointer;   // untypisiert

Typisierte Pointer sind immer schneller als untypisierte Pointer. Dafür sind untypisierte Pointer in ihrer Verwendung flexibler, da sie an keinen 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;



--Olaf 15:47, 9 September 2012 (UTC)