07-17-2022, 07:33 PM
(07-17-2022, 07:15 PM)Kernelpanic Wrote: Today I looked at passing variables/arguments to functions - by reference and by value. QBasic Reference P. 2.31.
Apparently, passing by value doesn't work for functions. But with a procedure (Sub) it worked.
Value at Sub: The value is not changed
Code: (Select All)'Beispiel fuer Uebergabe an Funktionen als Referenz und als Wert
'Funktioniert offenbar nicht mit Funktionen (?)
'17. Juli 2022
Option _Explicit
Declare Function AlsReferenz(eingabe as Integer) as Integer
Declare Sub AlsWert(eingabe as Integer) as Integer
Dim zahlref, zahlwert As Integer
Cls
Print "Referenzbeispiel - Eingabe wird veraendert"
Input "Eingabe: ", zahlref
Print Using "Eingabe vor Funktionsaufruf: ###"; zahlref
Print Using "Eingabe nach Funktionsaufruf (Eingabe x 3): ###"; AlsReferenz(zahlref)
Print "Wertbeispiel - Eingabe wird nicht veraendert"
Input "Eingabe: ", zahlwert
Print Using "Eingabe vor Funktionsaufruf: ###"; zahlwert
'Aufruf mit Wert in Klammern um sie zu einem Ausdruck zu machen
'QBasic Referenz S. 2.31
Call AlsWert((zahlwert))
Print Using "Eingabe nach Funktionsaufruf (Als Ausdruck): ###"; zahlwert
Print "Uebergabe nicht als Ausdruck - keine Klammern (Eingabe + 3)."
'Jetzt nicht als Ausdruck: Ohne extra Klammern
'um die Variable wird die Eingabe veraendert, da
'sie jetzt wieder als Referenz (Standard) uebergeben wird.
Call AlsWert(zahlwert)
Print Using "Eingabe nach Funktionsaufruf: ###"; zahlwert
Function AlsReferenz (eingabe As Integer)
AlsReferenz = eingabe * 3
End Function
Sub AlsWert (eingabe As Integer)
'Hat nur Auswirkung, wenn Argument nicht als Ausdruck
'uebergeben wird
eingabe = eingabe + 3
End Sub
And now with a function: Passing by value doesn't work.
Code: (Select All)'Beispiel fuer Uebergabe an Funktionen als Referenz und als Wert
'17. Juli 2022
Option _Explicit
Declare Function AlsReferenz(eingabe as Integer) as Integer
Declare Function AlsWert(eingabe as Integer) as Integer
Dim zahlref, zahlwert As Integer
Cls
Print "Referenzbeispiel - Eingabe wird veraendert"
Input "Eingabe: ", zahlref
Print Using "Eingabe vor Funktionsaufruf: ###"; zahlref
Print Using "Eingabe nach Funktionsaufruf: ###"; AlsReferenz(zahlref)
Print "Wertbeispiel - Eingabe wird nicht veraendert"
Input "Eingabe: ", zahlwert
Print Using "Eingabe vor Funktionsaufruf: ###"; zahlwert
Print Using "Eingabe nach Funktionsaufruf: ###"; AlsWert((zahlwert))
End 'Hauptprogramm
Function AlsReferenz (eingabe As Integer)
AlsReferenz = eingabe * 3
End Function
Function AlsWert (eingabe As Integer)
AlsWert = eingabe + 3
End Function
You are not changing the values in the function.
b = b + ...