Referenz - BYREF
Syntax: [DECLARE] { SUB | FUNCTION } Name (BYREF parameter AS Typ, ...) [AS Typ]
Typ: Klausel
Kategorie: Deklaration
BYREF legt in einer Parameterliste fest, dass ein Parameter 'by reference', also als direkte Referenz statt nur als Wert übergeben werden soll. Die Klausel kann bei der Deklaration bzw. Definition einer Prozedur angegeben werden; siehe dazu den Referenzeintrag Parameterübergabe. Zur Syntax siehe auch DECLARE, SUB und FUNCTION.
Bei einer BYREF übergebenen Variable wird beim Prozeduraufruf intern ein Zeiger auf den Speicherbereich der Variablen übergeben. Das hat zur Folge, dass (im Gegensatz zu BYVAL) alle Änderungen dieser Variablen in der bearbeitenden Prozedur direkt auf die ursprüngliche Variable einwirken, da ja direkt auf sie verwiesen wird.
In der aktuellen Version von FreeBASIC werden bei Zahlendatentypen (z. B. INTEGER, SINGLE) standardmäßig lediglich die Werte übergeben (by value). Um eine Variable als Referenz zu übergeben, muss die Klausel BYREF explizit angegeben werden.
STRINGs und UDTs werden standardmäßig BYREF übergeben; die Verwendung des Schlüsselwortes ist in diesem Fall überflüssig.
Arrays werden immer BYREF übergeben; die Verwendung des Schlüsselwortes BYREF oder BYVAL führt bei Arrays zu einer Fehlermeldung.
Beachten Sie aber auch die Unterschiede unter den Dialektformen und zu früheren Compiler-Versionen!
Beispiel:
DECLARE SUB MySub (BYREF a AS INTEGER, BYVAL b AS INTEGER)
DIM AS INTEGER a, b
a = 10
b = 10
PRINT "a = "; a
PRINT "b = "; b
PRINT
MySub a, b
PRINT "Wieder auf Modulebene:"
PRINT "a = "; a
PRINT "b = "; b
SLEEP
SUB MySub (BYREF a AS INTEGER, BYVAL b AS INTEGER)
a += 10
b += 10
PRINT "in MySub:"
PRINT "a = "; a
PRINT "b = "; b
PRINT
END SUB
Ausgabe:
a = 10
b = 10
in MySub:
a = 20
b = 20
Wieder auf Modulebene:
a = 20
b = 10
Unterschiede zu QB:
In QB werden Variablen standardmäßig BYREF übergeben.
Unterschiede zu früheren Versionen von FreeBASIC:
Bis einschließlich FreeBASIC v0.16 wurden Variablen standardmäßig BYREF übergeben.
Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb, -lang deprecated und -lang fblite werden Variablen standardmäßig BYREF übergeben.
Siehe auch:
BYVAL, Parameterübergabe, BYREF (Rückgaben)
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|