Sign in Join
Wiki copytemporary

Pointer/de: what changed

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

OldNewLine
1-\
21Zurück zu den [[Data type/de|Datentypen]].\
3-\
4-\
2+
53===Allgemeines zu Pointern / Zeigern=== Eigenschaften eines Pointers (Zeigers):
64
75- Ein Pointer ist ein Zeiger (eine Referenz) auf eine Speicherstelle.\
86- Ein Pointer ist ein ganzzahliger Datentyp zum Speichern einer Arbeitsspeicheradresse.\
97- Ein Pointer verweist auf die Anfangsadresse einer Variablen oder eines Objektes.\
108- Die Größe des Pointers ist entweder Longint oder Int64.\
119- Die genaue Größe des Pointers (Zeigers) ist abhängig vom Zielbetriebssystem und dem Zielprozessor.\
1210
13-\
1411Beispiel:\
1512
1613``` pascal
1714var
1815 ptr1: ^Integer; // typisiert
1916 ptr2: Pointer; // untypisiert
2017```
2118
2219Das Arbeiten mit typisierten Pointern ist schneller als das Arbeiten mit untypisierten Pointern.\
2320Dafür bietet das Arbeiten mit untypisierten Pointern mehr Flexibilität, da diese nicht an einen Datentyp gebunden sind.\
24-\
21+
2522Beispiel für die Verwendung eines typisierten Pointers an einem einfachen Datentyp:
2623
2724``` pascal
2825var
2926 a, b: Integer; // a und b sind Integer-Variablen.
3027 p: ^Integer; // p ist ein Pointer, der die Speicheradresse einer Variablen vom Datentyp Integer aufnehmen kann.
3128begin
3229 a := 500; // Die Variable a vom Datentyp Integer erhält einen gültigen Wert zugewiesen.
3330 p := @a; // Die Variable p vom Datentyp Pointer erhält jetzt die Adresse der Variablen a zugewiesen.
3431 b := p^; // Die Variable b vom Datentyp Integer holt sich über die Adresse im Pointer p den Wert aus der Variablen a.
3532 p := nil; // Die Variable p vom Datentyp Pointer enthält jetzt keine Adresse mehr (die Variable p zeigt auf nichts).
3633 // Der Pointer p kann mit einer neuen Speicheradresse versehen werden.
3734end;
3835```
3936
40-\
4137Beispiel für die Verwendung eines typisierten Pointers an einem Record:\
4238
4339``` pascal
4440type
4541 TNewRecord = record
4642 Wert1: ShortString;
4743 Wert2: ShortString;
4844 Wert3: ShortString;
4945 end;
5046var
5147 p: ^TNewRecord;
5248begin
5349 New(p); // erstellt einen Pointer und ein Object vom Typ TNewRecord.
5450 p^.Wert1 := 'Test'; // befüllt über den Pointer das Datenfeld des Objektes.
5551 p^.Wert2 := 'TestTest'; // befüllt über den Pointer das Datenfeld des Objektes.
5652 p^.Wert3 := 'TestTestTest'; // befüllt über den Pointer das Datenfeld des Objektes.
5753 Dispose(p); // Gibt den Pointer und damit das Objekt frei.
5854 // Damit sind alle Datenfelder und Daten des Pointers p gelöscht.
5955end;
6056```
6157
62-\
6358===Untypisierte Pointer / Zeiger=== Beispiel für die Definition eines untypisierten Pointers:\
6459
6560``` pascal
6661var
6762 ptr2: Pointer;
6863```
6964
70-\
7165Neuen Speicher anfordern und freigeben:\
7266
7367``` pascal
7468begin
7569
7670 ...
7771
7872 GetMem(ptr2, 4); // Integer ist 32 Bit, also 4 Byte groß
7973 Integer(ptr2^) := 2048; // Wert zuweisen
8074 FreeMem(ptr2); // Speicher freigeben
8175
8276 ...
8377
8478end;
8579```
8680
8781### Typisierte Pointer / Zeiger
8882
8983Es gibt zum Beispiel in Free Pascal u. a. folgende vordefinierte Pointer (Zeiger):
9084
9185- Pointer für Zeichentypen:
9286 - PChar (Zeiger für den Datentyp Char)
9387 - PAnsiChar (Zeiger für den Datentyp AnsiChar)
9488 - PWideCahr (Zeiger für den Datentyp WideChar)
9589 - PUnicodeChar (Zeiger für den Datentyp UnicodeChar)
9690- Pointer für vorzeichenlose ganzzahllige Werte:
9791 - PByte (Zeiger für den Datentyp Byte)
9892 - PWord (Zeiger für den Datentyp Word)
9993 - PDWord (Zeiger für den Datentyp DWord)
10094 - PCardinal (Zeiger für den Datentyp Cardinal)
10195 - PLongword (Zeiger für den Datentyp Longword)
10296- Pointer für vorzeichenbehaftete ganzzahllige Werte:
10397 - PShortint (Zeiger für den Datentyp Shortint)
10498 - PSmallint (Zeiger für den Datentyp Smallint)
10599 - PInteger (Zeiger für den Datentyp Integer)
106100 - PLongint (Zeiger für den Datentyp Longint)
107101 - PInt64 (Zeiger für den Datentyp Int64)
108102- Pointer für Fliesskommadatentypen Werte:
109103 - PSingle (Zeiger für den Datentyp Single)
110104 - PDouble (Zeiger für den Datentyp Double)
111105 - PExtended (Zeiger für den Datentyp Extended)
112106 - PComp (Zeiger für den Datentyp Comp)
113107 - PCurrency (Zeiger für den Datentyp Currency)
114108
115-\
116109Beispiele für die Definition eines typisierten Pointers:\
117110Beispiel 1:
118111
119112``` pascal
120113var
121114 ptr1: ^Integer; // erstellt einen typisierten Zeiger für den Datentyp Integer
122115```
123116
124-\
125117Neuen Speicher anfordern und freigeben:\
126118
127119``` pascal
128120begin
129121
130122 ...
131123
132124 New(ptr1); // fordert für den Zeiger einen Speicher an, in dem er seinen Wert speichern kann
133125 ptr1^ := 1; // Weist dem angeforderten Speicher einen Wert zu
134126 Dispose(ptr1) // gibt den angeforderten Speicher mit dem darin vorhanden Wert frei
135127 // das heisst der Wert wird gelöscht
136128
137129 ...
138130
139131end;
140132```
141133
142-\
143134Beispiel 2:
144135
145136``` pascal
146137function funTest: string;
147138var
148139 ptrZeiger: PInteger; // von Free Pascal vordefinierter Zeiger für den Datentyp Integer
149140 {
150141 alternativ geht für
151142 die Schreibweise ptrZeiger: PInteger;
152143 die Schreibweise ptrZeiger: ^integer;
153144 }
154145 intZahl: Integer; // definiert den Speicherort (Variable) für einen Integer Wert
155146
156147begin
157148
158149 result:= '';
159150 intZahl := 4; // Weist der Variablen einen Wert zu
160151
161152 ptrZeiger := @intZahl; // Weist dem Zeiger die Adresse der Variablen zu
162153 result := Inttostr(ptrZeiger^); // Der Zeiger übergibt den Wert der Variablen der Funktion
163154
164155end;
165156```
166157
167158---
168159*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