Confusion over passing by reference vs passing by value
#8
Why is the transfer of the sentence "By value" unsuccessful?

Row 48 -Satztest3 (satz3())- generates a compiler error.

Code: (Select All)
'Unterschiede bei Uebergabe einer Variablen, Zahl und String
'Call by reference (automatisch) gibt die Adresse der Variablen
'Variable kann veraendert werden.

'Call by value (Klammerung der Variablen) standardmaessig,
'wird eine Kopie uebergeben; keine Aenderung

Option _Explicit

Dim x As Integer
Dim satz As String
Dim satz2(2) As String, satz3(2) As String

Print
Print "x = 1 - Satz ist: Hallo, Fans + von QB64": Print

Print "Variable by reference: x + 1 = 2"
x = 1
Zahlentest x
Print "Wert von x nach Verlassen der Subroutine:"; x

Print
Print "Variable by value: Keine Veraenderung"
x = 1
Zahlentest (x)
Print "Wert von x nach Verlassen der Subroutine:"; x

Print
Print "String Variable by reference:"
satz = "Hallo, Fans"
Satztest satz 'Hier sollte die Adresse uebergeben werden.
Print "Wert des Strings satz nach Verlassen der Subroutine: "; satz
'Der auszugebende Satz muesste hier lauten: von QB64!

Print
Print "String variable by value:"
satz = "Hallo, Fans"
Satztest (satz) 'Hier wird eine Kopie erzeugt, und "von QB64" wird angehaengt
Print "Wert des Strings satz nach Verlassen der Subroutine: "; satz

Print
satz2() = "Sag niemals nie!"
Satztest2 satz2()
Print "Wert des Feldes von satz2 nach der Subroutine: ", satz2()

Print
satz3() = "Sag niemals nie!"
'Satztest3 (satz3()) '!! Damit hat der Compiler Probleme
Print "Wert des Feldes von satz3 nach der Subroutine: ", satz3()

End


Sub Zahlentest (y As Integer)
  y = y + 1
End Sub

Sub Satztest (b As String)
  b = b + " von QB64!"
End Sub

Sub Satztest2 (feld() As String)
  feld() = "Hallo, Donald Duck!"
End Sub

Sub Satztest3 (feld() As String)
  feld() = feld() + "Donald Duck"
End Sub


Quote:internal\c\c_compiler\bin\c++.exe  -w -DGLEW_STATIC -DFREEGLUT_STATIC -DDEPENDENCY_NO_SOCKETS -DDEPENDENCY_NO_PRINTER -DDEPENDENCY_NO_ICON -DDEPENDENCY_NO_SCREENIMAGE internal\c/qbx.cpp -c -o internal\c/qbx.o
In file included from internal\c/qbx.cpp:2514:
internal\c/..\\temp\\main.txt: In function 'void QBMAIN(void*)':
internal\c/..\\temp\\main.txt:235:16: error: cannot convert 'qbs*' to 'long long int*'
SUB_SATZTEST3(((qbs*)(((uint64*)(__ARRAY_STRING_SATZ3[0]))[0])));
              ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from internal\c/qbx.cpp:1264:
internal\c/..\\temp\\regsf.txt:4:29: note:  initializing argument 1 of 'void SUB_SATZTEST3(long long int*)'
void SUB_SATZTEST3(ptrszint*_SUB_SATZTEST3_ARRAY_STRING_FELD);
mingw32-make: *** [Makefile:337: internal\c/qbx.o] Error 1
Reply


Messages In This Thread
RE: Confusion over passing by reference vs passing by value - by Kernelpanic - 06-19-2022, 04:15 PM



Users browsing this thread: 5 Guest(s)