Variable as a reference or value to a function
#16
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. 


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
Reply


Messages In This Thread
RE: Variable as a reference or value to a function - by Kernelpanic - 07-18-2022, 08:03 PM



Users browsing this thread: 11 Guest(s)