Referenz - ANY
Syntax A: ... AS ANY [ PTR ]
Syntax B: DIM AS datentyp variable = ANY
Typ: Datentyp
Kategorie: Datentypen
Dieser Eintrag behandelt den Datentyp ANY. Für Informationen zu ANY als Klausel siehe INSTR, TRIM, LTRIM, RTRIM, DIM und REDIM.
Wird ANY in einer DECLARE-Anweisung verwendet, bewirkt es, dass Parameter jeden Typs an die Prozedur übergeben werden dürfen. Innerhalb der Prozedur werden sie dann so behandelt, wie im Prozedurheader angegeben.
Beispiel:
DECLARE SUB printFirstByte (byref x AS ANY)
DIM i AS INTEGER, z AS ZSTRING * 12, s AS STRING
i = -1
s = "Hallo Welt!"
z = "Hallo Welt!"
printFirstByte i
printFirstByte s
printFirstByte z
SLEEP
SUB printFirstByte (byref x AS UBYTE)
PRINT x
END SUB
Ausgabe:
255
160
72
Diese Werte kommen wie folgt zustande: Der INTEGER 'i' hat den Wert -1, d.h. alle Bits sind gesetzt (siehe BIN). Da 'i' BYREF übergeben wird, erhält die SUB nur die Adresse von 'i'. Im Prozedurheader wurde festgelegt, dass der Parameter, dessen Adresse empfangen wurde, wie ein UBYTE behandelt werden soll. Von den 32 bzw. 64 Bit der Integervariable 'i' werden also nur die ersten 8 ausgewertet. Diese sind alle gesetzt. In der Behandlung als UBYTE ergibt dies 255.
Vom STRING 's' wird ebenfalls die Adresse übermittelt; wie bei STRING (Datentyp) nachzulesen ist, steht an der Stelle, auf die verwiesen wird, nur der Bezeichner des Strings, nicht aber sein Inhalt. Das Ergebnis 160 ist also ein Teil der Adresse des Stringinhalts. Daher kann das Ergebnis auch von Rechner zu Rechner verschieden sein.
Da 'z' ein ZSTRING ist, hat diese Variable im Gegensatz zu 's' auch keinen Bezeichner. An der Adresse von 'z', die an die Prozedur übergeben wird, ist tatsächlich der Inhalt von 'z'. 72 ist der ASCII-Code von "H", dem ersten Zeichen des Strings.
Die Verwendung von ANY ohne PTR ist nur in DECLARE-Zeilen an BYREF-Argumenten erlaubt, um dort die Typenprüfung bei der Parameterübergabe zu deaktivieren.
Zusammen mit PTR wird ANY oft verwendet, um einen Pointer auf einen Speicherbereich zu setzen, dessen Inhalt kein spezielles Format hat; siehe dazu auch IMAGECREATE und ALLOCATE.
ANY als Startwert (Syntax B):
Bei der Deklaration von Zahlenvariablen oder Pointern wird deren Startwert automatisch auf 0 gesetzt. Dies lässt sich mit ANY verhindern. Die Variable enthält dann den Wert, der sich bereits zuvor an der zugewiesenen Stelle im Speicher befunden hat.
Dim As Integer x1, x2 = 5, x3 = Any
Print "x1 wird 0 zugewiesen: ", x1
Print "x2 wird 5 zugewiesen: ", x2
Print "x3 wird nichts zugewiesen: ", x3
Sleep
Achtung: Der Typ ANY darf nicht mit VARIANT verwechselt werden, einem VB-Typ, der dazu in der Lage ist, Informationen aller Datentypen zu speichern.
Unterschiede zu QB:
Pointer und Variablen-Initiatoren sind neu in FreeBASIC.
Unterschiede unter den FB-Dialektformen:
Variablen-Initiatoren stehen unter -lang qb nicht zur Verfügung.
Siehe auch:
DECLARE, SUB, FUNCTION, ALLOCATE, PTR, IMAGECREATE, INSTR, TRIM, LTRIM, RTRIM, DIM, Datentypen, Prozeduren
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|