Einleitung:
|
Den Arbeitsspeicher, in dem ein Programm abläuft, kann man sich wie eine Datei vorstellen. Es ist ein speziell für das Programm reservierter Bereich, in dem der Programmcode und alle Variabeln geladen werden.
Die verschiedenen Teile dieses Speichers kann man über Adressen ansprechen. Die Adresse ist nichts anderes, als der Punkt, an dem sich die gesuchten Daten im Speicher befinden, gemessen, vom Anfang des für dieses Programm reservierten Speichers. Von dieser relativen Speicheradressierung merkt der Programmierer allerdings nichts. Windows simuliert für die einzelnen Programme einen mit 32Bit adressierbaren zusammenhängenden Speicher, selbst wenn dieser quer über den physikalischen Arbeitsspeicher verteilt ist. Wichtig ist nur, dass man nur auf den Arbeitsspeicher, der dem eigenen Programm zugeteilt ist direkten Zugriff hat.
Mit Hilfe der Poke() und Peek() Befehle kann man zum Beispiel diesen Speicher direkt manipulieren.
|
Was genau ist jetzt ein Pointer?
|
Nun, da jede Variable, und jede Linked List und auch alle anderen Speicherelemente immer eine Adresse besitzen, und es in einigen Fällen auch sehr Praktisch ist, diese zu kennen, hat man die Pointer eingeführt. Sie sind nichts anderes, als die Adresse zu irgend einem Element im Speicher des Programms. Man muss sich einfach im Klaren darüber sein, dass man, wenn man von einem Pointer spricht, eben nicht den Inhalt einer Variable, oder eines sonstigen Elementes spricht, sondern nur von seiner Adresse.
Man kann auch Pointer von Elementen verändern. Diese verweisen dann auf einen anderen Speicherbereich, als vorher.
Ein Pointer ist immer eine 32Bit Adresse, das heißt, man kann diese Adressen in LONG Variablen speichern.
|
Probleme bei der Verwendung von Pointern:
|
Ein häufiges Problem entsteht dadurch, dass man bei der Arbeit mit Pointern meist direkte Manipulationen im Arbeitsspeicher vornimmt. Bei einem Fehler im Programm kann dies schnell zu einem Absturz des Programms kommen. Der PureBasic Debugger erkennt diese Arten von Fehlern meist nicht, was die Suche nach einem derartigen Fehler erschwert.
Aus diesem Grund empfehle ich, Pointer nur da im Programm zu verwenden, wo sie sinnvoll und notwendig sind. Je weniger Pointer man verwendet, desto leichter lässt sich eine mögliche Fehlerquelle in Verbindung damit finden.
Die Tatsache, dass dies leicht zu Programmabstürzen führt sollte einen aber nicht davon abhalten, sich einmal mit Pointern zu beschäftigen, denn richtig eingesetzte Pointer geben dem Programmierer eine Menge neuer Möglichkeiten.
|
Pointer in PureBasic:
|
Viele Programmierer, die bereits in anderen Sprachen mit Pointern gearbeitet haben, haben Probleme damit, die Art, wie Pointer in PureBasic funktionieren zu verstehen. Das Problem ist, dass zum Beispiel in C die Pointer Handhabung noch um ein vielfaches flexibler ist, als in PureBasic. Ich versuche, hier in diesem Tutorial, alles zu beschreiben, was man in PureBasic mit Pointern machen kann. Was hie nicht beschrieben steht, ist einfach so nicht möglich.
|
Zusammenfassung:
|
- Pointer sind Speicheradressen von Elementen im Arbeitsspeicher eines Programms
- Pointer sind 32Bit Adressen, und können als LONG gespeichert werden.
- Programmieren mit Pointern macht die Fehlersuche etwas schwerer.
|
|