POINTER
POINTER | |
Syntax: | POINTER(<Variable>) |
Parameter | |
<Variable>: beliebige Variable | |
Einordnung | |
Typ: | numerische Funktion |
Kontext: | Variablen |
Aufgabe: | Startadresse einer Variablen ermitteln |
Abkürzung: | poI |
Token: | $ce $0a (206 10) |
Verwandte Befehle | |
Anmerkung: Dieser Artikel beschreibt die BASIC-Funktion POINTER ab Commodore BASIC V7.0 oder höher.
Die BASIC-Funktion POINTER() gibt die Startadresse einer Variable in Speicher-Bank 1 zurück. Diese Adresse kann man dann z.B. einer Maschinensprache-Routine mitgeben, um ein Variablenfeld zu sortieren o.ä. Das Argument darf sowohl eine einfache Variable als auch ein Feldvariablenelement beliebigen Typs sein, jedoch keine Konstante. Wird eine Konstante übergeben oder kein bzw. zu viele Argumente, erscheint ein ?SYNTAX ERROR.
Wurde einer einfachen Variablen noch kein Wert zugewiesen, ist der Rückgabewert der Funktion 0. Wird der Funktion eine nicht mit DIM initialisierte Feldvariable übergeben, hat dies als Nebenwirkung die Reservierung eines Feldes mit der Standardfeldgröße von 11 Elementen. Liegt der Index der Feldvariable außerhalb der Array-Grenzen, erfolgt die Fehlerausgabe ?BAD SUBSCRIPT ERROR.
Bei der Benutzung von POINTER mit Feldvariablen ist zu beachten, dass zwischen Auslesen und Benutzung der Adresse keine weiteren einfachen Variablen angelegt (erstmalig benutzt) werden sollten, da sich sonst in diesem Fall die Startadresse aller Arrays ändert.
Beispiele[Bearbeiten | Quelltext bearbeiten]
A=POINTER(S$) BANK 1 PRINT "STRINGLAENGE:",PEEK(A) PRINT "ADRESSE STRINGDATEN:",PEEK(A+1)+PEEK(A+2)*256
In diesem Beispiel wird die Länge der Zeichenkette S$ sowie deren Startadresse (nicht die Startadresse der Variablen!) ausgegeben.
PRINT POINTER(A(5))
Liefert die Adresse des 6. (Index beginnt bei 0) Feldelements, wobei das Feld gegebenenfalls mit Standardgröße von 11 Elementen automatisch angelegt wird.
A1%=1:A2=2 PRINT "INTEGER-VARIABLE:" POINTER(A2)-POINTER(A1%) PRINT "INTEGER-FELDELEMENT:" POINTER(I%(1))-POINTER(I%(0)) S1$="1":S2=2 PRINT "STRING-VARIABLE-FELDELEMENT:" POINTER(S2)-POINTER(S1$) PRINT "STRING-FELDELEMENT:" POINTER(S$(1))-POINTER(S$(0))
Ermittelt den Speicherverbrauch der Integer-Variable A1% und String-Variable S1$, die wie andere Fließkommavariable auch 7 Bytes verbrauchen, wo hingegen bei einem Feld nur der tatsächlich verbrauchte Platz für ein Element benötigt wird (2 bzw. 3 Bytes).
IF POINTER(I) = 0 THEN PRINT "VARIABLE I IST NOCH NICHT VERWENDET!"
Status über eine Variable ausgeben, z.B. als Debugging-Ausgabe bei einer TRAP-Behandlungsroutine.
APPEND | BANK | BEGIN | BEND | BLOAD | BOOT | BSAVE | BUMP | CATALOG | COLLISION | COLOR | CONCAT | DCLEAR | DCLOSE | DOPEN | DVERIFY | ENVELOPE | FAST | FETCH | FILTER | GO64 | MOVSPR | (OFF) | PEN | PLAY | POINTER | POT | (QUIT) | RECORD | RREG | RSPCOLOR | RSPPOS | RSPRITE | RWINDOW | SLEEP | SLOW | SOUND | SPRCOLOR | SPRDEF | SPRITE | SPRSAV | STASH | SWAP | TEMPO | WIDTH | WINDOW | XOR