Sign in Join
Wiki copytemporary

Pointer/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Pointer/de

OldNewLine
1+\
2+Zurück zu den [[Data type/de|Datentypen]].\
3+\
4+\
5+===Allgemeines zu Pointern / Zeigern=== Eigenschaften eines Pointers (Zeigers):
6+
7+- Ein Pointer ist ein Zeiger (eine Referenz) auf eine Speicherstelle.\
8+- Ein Pointer ist ein ganzzahliger Datentyp zum Speichern einer Arbeitsspeicheradresse.\
9+- Ein Pointer verweist auf die Anfangsadresse einer Variablen oder eines Objektes.\
10+- Die Größe des Pointers ist entweder Longint oder Int64.\
11+- Die genaue Größe des Pointers (Zeigers) ist abhängig vom Zielbetriebssystem und dem Zielprozessor.\
12+
13+\
14+Beispiel:\
15+
16+``` pascal
17+var
18+ ptr1: ^Integer; // typisiert
19+ ptr2: Pointer; // untypisiert
20+```
21+
22+Das Arbeiten mit typisierten Pointern ist schneller als das Arbeiten mit untypisierten Pointern.\
23+Dafür bietet das Arbeiten mit untypisierten Pointern mehr Flexibilität, da diese nicht an einen Datentyp gebunden sind.\
24+\
25+Beispiel für die Verwendung eines typisierten Pointers an einem einfachen Datentyp:
26+
27+``` pascal
28+var
29+ a, b: Integer; // a und b sind Integer-Variablen.
30+ p: ^Integer; // p ist ein Pointer, der die Speicheradresse einer Variablen vom Datentyp Integer aufnehmen kann.
31+begin
32+ a := 500; // Die Variable a vom Datentyp Integer erhält einen gültigen Wert zugewiesen.
33+ p := @a; // Die Variable p vom Datentyp Pointer erhält jetzt die Adresse der Variablen a zugewiesen.
34+ b := p^; // Die Variable b vom Datentyp Integer holt sich über die Adresse im Pointer p den Wert aus der Variablen a.
35+ p := nil; // Die Variable p vom Datentyp Pointer enthält jetzt keine Adresse mehr (die Variable p zeigt auf nichts).
36+ // Der Pointer p kann mit einer neuen Speicheradresse versehen werden.
37+end;
38+```
39+
40+\
41+Beispiel für die Verwendung eines typisierten Pointers an einem Record:\
42+
43+``` pascal
44+type
45+ TNewRecord = record
46+ Wert1: ShortString;
47+ Wert2: ShortString;
48+ Wert3: ShortString;
49+ end;
50+var
51+ p: ^TNewRecord;
52+begin
53+ New(p); // erstellt einen Pointer und ein Object vom Typ TNewRecord.
54+ p^.Wert1 := 'Test'; // befüllt über den Pointer das Datenfeld des Objektes.
55+ p^.Wert2 := 'TestTest'; // befüllt über den Pointer das Datenfeld des Objektes.
56+ p^.Wert3 := 'TestTestTest'; // befüllt über den Pointer das Datenfeld des Objektes.
57+ Dispose(p); // Gibt den Pointer und damit das Objekt frei.
58+ // Damit sind alle Datenfelder und Daten des Pointers p gelöscht.
59+end;
60+```
61+
62+\
63+===Untypisierte Pointer / Zeiger=== Beispiel für die Definition eines untypisierten Pointers:\
64+
65+``` pascal
66+var
67+ ptr2: Pointer;
68+```
69+
70+\
71+Neuen Speicher anfordern und freigeben:\
72+
73+``` pascal
74+begin
75+
76+ ...
77+
78+ GetMem(ptr2, 4); // Integer ist 32 Bit, also 4 Byte groß
79+ Integer(ptr2^) := 2048; // Wert zuweisen
80+ FreeMem(ptr2); // Speicher freigeben
81+
82+ ...
83+
84+end;
85+```
86+
87+### Typisierte Pointer / Zeiger
88+
89+Es gibt zum Beispiel in Free Pascal u. a. folgende vordefinierte Pointer (Zeiger):
90+
91+- Pointer für Zeichentypen:
92+ - PChar (Zeiger für den Datentyp Char)
93+ - PAnsiChar (Zeiger für den Datentyp AnsiChar)
94+ - PWideCahr (Zeiger für den Datentyp WideChar)
95+ - PUnicodeChar (Zeiger für den Datentyp UnicodeChar)
96+- Pointer für vorzeichenlose ganzzahllige Werte:
97+ - PByte (Zeiger für den Datentyp Byte)
98+ - PWord (Zeiger für den Datentyp Word)
99+ - PDWord (Zeiger für den Datentyp DWord)
100+ - PCardinal (Zeiger für den Datentyp Cardinal)
101+ - PLongword (Zeiger für den Datentyp Longword)
102+- Pointer für vorzeichenbehaftete ganzzahllige Werte:
103+ - PShortint (Zeiger für den Datentyp Shortint)
104+ - PSmallint (Zeiger für den Datentyp Smallint)
105+ - PInteger (Zeiger für den Datentyp Integer)
106+ - PLongint (Zeiger für den Datentyp Longint)
107+ - PInt64 (Zeiger für den Datentyp Int64)
108+- Pointer für Fliesskommadatentypen Werte:
109+ - PSingle (Zeiger für den Datentyp Single)
110+ - PDouble (Zeiger für den Datentyp Double)
111+ - PExtended (Zeiger für den Datentyp Extended)
112+ - PComp (Zeiger für den Datentyp Comp)
113+ - PCurrency (Zeiger für den Datentyp Currency)
114+
115+\
116+Beispiele für die Definition eines typisierten Pointers:\
117+Beispiel 1:
118+
119+``` pascal
120+var
121+ ptr1: ^Integer; // erstellt einen typisierten Zeiger für den Datentyp Integer
122+```
123+
124+\
125+Neuen Speicher anfordern und freigeben:\
126+
127+``` pascal
128+begin
129+
130+ ...
131+
132+ New(ptr1); // fordert für den Zeiger einen Speicher an, in dem er seinen Wert speichern kann
133+ ptr1^ := 1; // Weist dem angeforderten Speicher einen Wert zu
134+ Dispose(ptr1) // gibt den angeforderten Speicher mit dem darin vorhanden Wert frei
135+ // das heisst der Wert wird gelöscht
136+
137+ ...
138+
139+end;
140+```
141+
142+\
143+Beispiel 2:
144+
145+``` pascal
146+function funTest: string;
147+var
148+ ptrZeiger: PInteger; // von Free Pascal vordefinierter Zeiger für den Datentyp Integer
149+ {
150+ alternativ geht für
151+ die Schreibweise ptrZeiger: PInteger;
152+ die Schreibweise ptrZeiger: ^integer;
153+ }
154+ intZahl: Integer; // definiert den Speicherort (Variable) für einen Integer Wert
155+
156+begin
157+
158+ result:= '';
159+ intZahl := 4; // Weist der Variablen einen Wert zu
160+
161+ ptrZeiger := @intZahl; // Weist dem Zeiger die Adresse der Variablen zu
162+ result := Inttostr(ptrZeiger^); // Der Zeiger übergibt den Wert der Variablen der Funktion
163+
164+end;
165+```
166+
167+---
168+*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](/wiki-contact).*

Back to history