POINTER

Aus C64-Wiki
Zur Navigation springenZur Suche springen
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.