07-18-2022, 08:03 PM
(This post was last modified: 07-18-2022, 08:05 PM by Kernelpanic.)
Ok, I think I have understood it now. This tip from Steve was crucial (Thanks!):
For SUBs and for FUNCTIONs, variables pass by reference as long as the types match.
The variable must be explicitly changed in the function.
AsValue = input * 3 -- this doesn't work. This doesn't work even if the variable types match.
Same goes for C. I've been trying to change the value at the address of the variable for over two hours. Now it worked.
For SUBs and for FUNCTIONs, variables pass by reference as long as the types match.
The variable must be explicitly changed in the function.
AsValue = input * 3 -- this doesn't work. This doesn't work even if the variable types match.
Same goes for C. I've been trying to change the value at the address of the variable for over two hours. Now it worked.
Code: (Select All)
'Uebergabe von Variablen an Funktionen als Referenz oder Wert.
'Variablen an Funktionen werden auf genau die gleiche Weise wie
'an Subs als Referenz'uebergeben. Dabei lautet die wichtigste
'Faustregel: Die Variablentypen muessen uebereinstimmen,
'um als Referenz zu gelten.
'
'Bei SUBs und bei FUNCTIONs werden Variablen als Referenz uebergeben,
'solange die Eingabewertpen uebereinstimmen, sonst werden sie
'nur als Wert uebergeben.
'Steve McNeill - 18. Juli 2022
Option _Explicit
Dim eingaberef As Integer
Dim eingabewert As _Float
Input "Eingabe: ", eingaberef
Print AlsReferenz(eingaberef)
Print AlsReferenz(eingaberef)
Print AlsReferenz(eingaberef)
'Der urspruengliche Wert der Variablen wurde veraendert
'Zugriff auf die Adresse
Print Using "Eingabe ist jetzt: ###"; eingaberef
Print
Input "Eingabe als Wert: ", eingabewert
Print AlsWert(eingabewert)
Print AlsWert(eingabewert)
Print AlsWert(eingabewert)
'Die Eingabetypen stimmen nicht ueberein: Float an Integer
'Es wird mit einer Kopie der Variablen gearbeitet
'daher keine Aenderung der urspruenglichen Variablen
Print Using "Eingabe ist nicht veraendert: ###"; eingabewert
End 'Hauptprogramm
Function AlsReferenz (eingaberef As Integer)
'Nur so wird die Variable veraendert
eingaberef = eingaberef * 3
AlsReferenz = eingaberef 'Das bringt nichts: (eingaberef + 3)
End Function
Function AlsWert (eingabewert As Integer)
eingabewert = eingabewert + 1
AlsWert = 2 * eingabewert
End Function