Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - BYREF

Referenz-Navigation

 

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 BefehlsreferenzeintragParameterübergabe. Zur Syntax siehe auch BefehlsreferenzeintragDECLARE, BefehlsreferenzeintragSUB und BefehlsreferenzeintragFUNCTION.

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 BefehlsreferenzeintragBYVAL) 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. BefehlsreferenzeintragINTEGER, BefehlsreferenzeintragSINGLE) standardmäßig lediglich die Werte übergeben (by value). Um eine Variable als Referenz zu übergeben, muss die Klausel BYREF explizit angegeben werden.

BefehlsreferenzeintragSTRINGs und BefehlsreferenzeintragUDTs werden standardmäßig BYREF übergeben; die Verwendung des Schlüsselwortes ist in diesem Fall überflüssig.

BefehlsreferenzeintragArrays 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 Befehlsreferenzeintrag-lang qb, -lang deprecated und -lang fblite werden Variablen standardmäßig BYREF übergeben.

Siehe auch:
BefehlsreferenzeintragBYVAL, BefehlsreferenzeintragParameterübergabe, BefehlsreferenzeintragBYREF (Rückgaben)


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 29.06.2007 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 26.01.2015 von RedakteurVolta gespeichert.
  Versionen Versionen