Referenz - POKE
Typ: Anweisung
Syntax: POKE [Datentyp,] Adresse, Wert
Kategorie: Pointer
POKE schreibt einen Wert direkt in den RAM.
- 'Datentyp' ist der Datentyp des Wertes, der geschrieben werden soll; von 'Datentyp' hängt ab, wie viele Bytes geschrieben werden. Auch STRINGs und UDTs werden akzeptiert. Die zu schreibende Datenmenge richtet sich hier nach der Länge des STRINGs bzw. der Größe des UDTs. Wird 'Datentyp' ausgelassen, nimmt FreeBASIC automatisch UBYTE an.
- 'Adresse' ist ein Pointer auf die Speicherstelle im RAM, auf die geschrieben werden soll.
- 'Wert' ist der Wert, der an die angegebene Adresse geschrieben werden soll.
Mit PEEK und POKE wurden in älteren BASIC-Dialekten Pointer-Funktionen erstellt.
Beispiel: Ändern einer Variablen direkt über ihre Adresse.
DIM x AS BYTE, addr AS BYTE PTR
addr = VARPTR(x)
x = 5
PRINT x
POKE BYTE, addr, 10
PRINT x
SLEEP
Diese Form funktioniert einwandfrei. FreeBASIC hat jedoch eigene Pointer-Funktionen, die ein komfortableres Programmieren ermöglichen. Mit den FB-eigenen Funktionen würde dieses Beispiel so aussehen:
DIM x AS BYTE, addr AS BYTE PTR
addr = @x
x = 5
PRINT x
*addr = 10
PRINT x
SLEEP
Die Syntax
*Pointer = Ausdruck
setzt also den Wert, der an der Speicherstelle steht, auf die der Pointer zeigt. Wie viele Bytes geschrieben werden, hängt dabei vom Typ des Pointers ab (BYTE PTR, SINGLE PTR, ...)
Unterschiede zu QB:
Unter QB ist es nicht möglich, den Datentyp des zu schreibende Werts festzulegen; es wird immer ein UBYTE geschrieben.
Unterschiede zu früheren Versionen von FreeBASIC:
- Seit FreeBASIC v0.16 ist der Standard-Datentyp UBYTE; davor war es BYTE.
- Seit FreeBASIC v0.13 ist es möglich, STRINGs und UDTs zu schreiben.
Siehe auch:
PEEK, VARPTR, SADD, Pointer, Datentypen, Speicher
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|