Mal allgemein was bezüglich "Dereferenzieren":
In Purebasic gibt zwei Arten zu dereferenzieren, mit angehängter Struktur und ohne. In C kann man jeden Datentyp zu einem Pointer machen, auch Pointer selbst. Das geht in einer Zeile zum Beispiel so:
Hat man jetzt einen Integer und will den Zeiger 'p' darauf zeigen lassen, macht man das so:
Auf den Zeiger zugreifen, kann man lesend und schreibend über 'p'. Damit kann man die Zeigeradresse auslesen und ändern.
Möchte man den Zeiger dereferenzieren, nutzt man den Dereferenzierungsoperator *, d.h mit "*p" kann man auf den Wert an der Stelle, auf die der Zeiger zeigt, lesend und schreibend zugreifen. In diesem Fall wäre das 123. Ändert man in diesem Beispiel 'p' nicht, kann man durch Änderung von '*p' auch gleichzeitig den Wert von 'a' ändern.
In Purebasic sieht das ganze so aus:
Code: Alles auswählen
Define *p.Long = 0 ;Pointer auf eine Long-Struktur (äquivalent zu int in C)
Um das selbe wie in C zu erreichen, nutzt man hier eine Struktur anstatt des nativen Datentyps '.i'. Sonst könnte Purebasic später nicht unterscheiden, ob man den Pointer selbst oder den dereferenzierten Wert lesen bzw. schreiben möchte.
Möchte man hier den Zeiger nun dereferenzieren, muss man die angehängte Struktur 'Long' verwenden, d.h. mit '*p\l' kann man lesend und schreibend auf den dereferenzierten Wert zugreifen, Möchte man nur den Zeiger selbst lesen oder schreiben, nutzt man '*p'. Die Variable 'p' hingegen ist wieder eine neue Variable und hat nichts mit '*p' zu tun.