Byval überträgt eine Kopie des Parameterspeichers in die Callee. Mit anderen Worten, der Wert, der direkt in den Stapel gedrückt wird, ist der übergebene Wert.
ByRef überträgt die tatsächliche Adresse des Parameterspeichers an die Callee. Mit anderen Worten, was in den Stapel gedrückt wird, ist die Adresse des tatsächlichen Inhalts. Der Callee kann den Inhalt in der Adresse direkt ändern.
Byval sind die Wertquelldaten, die nicht geändert werden
Sie können diesen Wert als Ihre eigene lokale Variable verwenden
ByREF ist die Passadresse, die Quelldaten können geändert werden
Ihr Betrieb auf dieser Variablen wirkt sich auf die Variable aus, die Sie übergeben, genau wie das Gefühl eines Zeigers
Beispiel:
Die Codekopie lautet wie folgt:
Subadd1 (ByvalnoaSint32)
Nein = Nein+100
Ende
Subadd2 (ByRefnoaSint32)
Nein = Nein+100
Ende
privateSubbutton1_click (SenderasObject, EasventArgs) Handlesbutton1.click
DimaaSint32
A = 100
Add1 (a)
msgbox ("a ist:" & a) 'zeigt, dass der Wert von a 100 beträgt
Add2 (a)
msgbox ("a ist:" & a) 'zeigt, dass der Wert von A 200 ist, da der Parameter NO in add2 ByRef ist, dh,
'Übergeben von einer Adresse, so dass es nach geänderter Änderung in add2 verursacht wird
'Der Wert des Quellparameters A wird ebenfalls geändert.
Ende
——————————————————————————————————————————————————————————————————————————————————— dem
3. Byval und Byref
Der von Byval übergebene Parameterwert und die Adresse des von ByRef bestandenen Parameters. Hier müssen wir nicht zwischen Zeigern/Adressen/Referenzen unterscheiden. In VB sind sie einfach drei verschiedene Aussagen über eine Sache. Sogar VB -Dokumente werden mit diesen Begriffen gemischt (aber in C ++ müssen wir zwischen Zeigern und Referenzen unterscheiden)
Freunde, die zuerst dem obigen Programm 2 SWAPPTR ausgesetzt sind, müssen herausfinden, wo Byval hinzugefügt werden soll und wo nicht hinzugefügt werden soll.
Das genaue Verständnis der Differenz zwischen Übergabe von Werten und Übergabeadressen (Zeiger) ist die Grundlage für die korrekte Verwendung von Zeigern in VB.
Jetzt wird ein einfachstes Experiment verwendet, um dieses Problem zu betrachten, z. B. das folgende Verfahren drei:
【Programm drei】: Erfahrung Byval und ByRef
Die Codekopie lautet wie folgt:
Sub testcopymemory ()
Dim K so lang
K = 5
Hinweis: Copymemory Byval VAGTR (K), 40000, 4
Debug.print k
Ende sub