Martok hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| PLeaf = ^TLeaf; TLeaf = record Operation: (ltValue, ltAdd,ltSubtract,ltDivide,ltMultiply); Op1,Op2: PLeaf; Value: integer; end; | |
Hi,
Sie haben sich noch nicht mit Klassen beschäftigt, ob sie dann Pointer schon kennen
Zur Erklärung: Ein Pointer wird durch ein Dach(
^) gekennzeichnet und enthält eine Speicheradresse, über die auf den entsprechenden Speicher zugegriffen werden kann. Pointer(zu Deutsch: Zeiger) werden von Delphi oft
implizit verwendet, d.h., wenn du eine Variable als TLeaf deklarierst, mach Delphi oft Pointer daraus.
Zum Umgang mit Pointern: Der Operator(Operatoren sind z.B. +, - oder *) "@" liefert die Speicheradresse der nachstehenden Variable. Bei der Deklaration von Pointern kommt das Dach danach(MyPointer^). Verwendest du den Pointer nun, so wird zunächst einmal auf die Speicheradresse zugegriffen, z.B.
MyPouinter := @MyObject. Willst du nun auf den Speicher, statt auf die Speicheradresse, zugreifen, so liefert ein Dach nach dem Pointer(
MyPointer^) den Speicher, auf den die Adresse/der Pointer zeigt.
Was Martok also vorschlägt ist, dass z.B.
(3 + 4) * (6 + 2) als eine Operation angesehen wird, die aus den Operationen
3 + 4 und 6 + 2 besteht. Das Ausrechnen eines Terms würde dann über eine Methode verlaufen, die einen TLeaf-Record als Parameter verwendet und, wenn er wiederum aus zwei Operationen besteht, sich selbst(rekursiv also) wieder aufruft, um das Ergebnis seiner Einseloperationen zu erhalten.
Wenn ihr noch keine Pointer behandelt habt, lass die deklaration als Pointer einfach weg:
Delphi-Quelltext
1: 2: 3: 4: 5:
| TLeaf = record Operation: (ltValue, ltAdd,ltSubtract,ltDivide,ltMultiply); Op1,Op2: TLeaf; Value: integer; end; |
Delphi behandelt diese Variable dann implizit als Pointer.
Habt ihr euch schon mit
nil beschäftigt? Das ist ein Pointer auf eine leere Speicheradresse, also ins nichts.
mfG,