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 - BYVAL (Klausel)

Referenz-Navigation

 

Syntax: [DECLARE] { SUB | FUNCTION } Name (BYVAL parameter AS Typ, ...) [AS Typ]
Typ: Klausel
Kategorie: Deklaration

BYVAL legt in einer Parameterliste fest, dass ein Parameter 'by value', also als Wert statt als direkte Referenz übergeben werden soll. Die Klausel kann bei der Deklaration bzw. Definition einer Prozedur angegeben werden; siehe dazu der Referenzeintrag BefehlsreferenzeintragParameterübergabe. Zur Syntax siehe auch BefehlsreferenzeintragDECLARE, BefehlsreferenzeintragSUB und BefehlsreferenzeintragFUNCTION.

Bei einer BYVAL übergebenen Variable wird beim Prozeduraufruf eine Kopie der Variablen erstellt und nur diese an die Prozedur weitergegeben. Wird innerhalb der Prozedur der Wert geändert, hat das keine rückwirkenden Auswirkungen auf die ursprünglich übergebene Variable. Im Gegensatz dazu übergibt BefehlsreferenzeintragBYREF die Variable als Referenz; eine Änderung der übergebenen Variablen innerhalb der Prozedur bleibt dann auch nach Ende der Prozedur erhalten.

In der aktuellen Version von FreeBASIC werden Zahlendatentypen (z. B. BefehlsreferenzeintragINTEGER, BefehlsreferenzeintragSINGLE) standardmäßig BYVAL übergeben; die Verwendung des Schlüsselwortes ist in diesem Fall überflüssig.

BefehlsreferenzeintragSTRINGs und BefehlsreferenzeintragUDTs werden BYREF übergeben. BYVAL hat bei Strings eine andere Bedeutung: statt einer Kopie des Strings wird ein BefehlsreferenzeintragZSTRING BefehlsreferenzeintragPTR auf den Stringinhalt übergeben. Der String sollte innerhalb der Prozedur nicht verändert werden, da die Adresse des Strings nicht aktualisiert wird. Das Verhalten von BYVAL bei String-Variablen kann sich in zukünftigen Versionen ändern; deshalb sollte man die Verwendung vermeiden und lieber BefehlsreferenzeintragZSTRING einsetzen.

BefehlsreferenzeintragArrays werden immer BYREF übergeben; eine Verwendung des Schlüsselwortes 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 (BYVAL a AS INTEGER, BYREF b AS INTEGER)

DIM AS INTEGER a = 1, b = 1

PRINT "Vor Subaufruf:"
PRINT "a = "; a
PRINT "b = "; b
PRINT

MySub a, b

PRINT "Nach Subaufruf:"
PRINT "a = "; a
PRINT "b = "; b
SLEEP

SUB MySub (BYVAL a AS INTEGER, BYREF b AS INTEGER)
   a += 1
   b += 1

   PRINT "In der Sub:"
   PRINT "a = "; a
   PRINT "b = "; b
   PRINT
END SUB

Ausgabe:

Vor Subaufruf:
a = 1
b = 1

In der Sub:
a = 2
b = 2

Nach Subaufruf:
a = 1
b = 2

Beispiel mit ZStrings:

Declare Sub MySub (ByVal a As ZString Ptr)

Dim As ZString Ptr a = @"normal"

Print "Vor Subaufruf:"
Print "a = "; *a
Print

MySub a

Print "Nach Subaufruf:"
Print "a = "; *a
Sleep

Sub MySub (ByVal a As ZString Ptr)
   a = @"veraendert"

   Print "In der Sub:"
   Print "a = "; *a
   Print
End Sub

Ausgabe:

Vor Subaufruf:
a = normal

In der Sub:
a = veraendert

Nach Subaufruf:
a = normal

Hinweis:
Seit FreeBASIC v0.90 kann BefehlsreferenzeintragBYVAL auch bei der Rückgabe per BefehlsreferenzeintragRETURN und BefehlsreferenzeintragFUNCTION verwendet werden.

Unterschiede zu QB:
In QB werden Variablen standardmäßig BefehlsreferenzeintragBYREF übergeben.

Unterschiede zu früheren Versionen von FreeBASIC:

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 (Schlüsselwort), BefehlsreferenzeintragBYREF, BefehlsreferenzeintragParameterübergabe, BefehlsreferenzeintragBYVAL (Rückgaben)


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