BYVAL transfère une copie de la mémoire des paramètres sur la Callee. En d'autres termes, la valeur directement poussée dans la pile est la valeur passée.
ByRef transmet l'adresse réelle de la mémoire des paramètres à la Callee. En d'autres termes, ce qui est enfoncé dans la pile est l'adresse du contenu réel. La Callee peut modifier directement le contenu dans l'adresse.
ByVal est la valeur des données de source qui ne seront pas modifiées
Vous pouvez utiliser cette valeur comme votre propre variable locale
ByRef est l'adresse de pass, les données source peuvent être modifiées
Votre opération sur cette variable aura un impact sur la variable que vous transmettez, tout comme la sensation d'un pointeur
Exemple:
La copie de code est la suivante:
SubAdd1 (ByValNoasInt32)
Non = non + 100
fin
SubAdd2 (ByRefNoasInt32)
Non = non + 100
fin
Privatsubbutton1_click (SenderasObject, Easventargs) Handlesbutton1.click
dimaasint32
a = 100
Add1 (a)
msgbox ("a est:" & a) 'montre que la valeur de a est de 100
Add2 (a)
msgbox ("a est:" & a) 'montre que la valeur de a est 200, car le paramètre no dans add2 est byRef, c'est-à-dire,
'Passé par l'adresse, donc après avoir modifié non dans Add2, cela provoquera
«La valeur du paramètre source A est également modifiée.
Fin
—————————————————————————————————————————
3. Byval et Byref
La valeur du paramètre réalisée par ByVal et l'adresse du paramètre transmise par ByRef. Ici, nous n'avons pas à faire la distinction entre les pointeurs / adresses / références. Dans VB, ce ne sont que trois déclarations différentes sur une chose. Même les documents VB sont mélangés avec ces termes (mais en C ++, nous devons faire la distinction entre les pointeurs et les références)
Les amis qui sont d'abord exposés au programme ci-dessus 2 Swapptr doivent déterminer où ajouter ByVal et où ne pas ajouter (ne pas ajouter Byval est d'utiliser le byref par défaut de VB)
Comprendre avec précision la différence entre le passage des valeurs et le passage des adresses (pointeurs) est la base de l'utilisation correcte des pointeurs dans VB.
Maintenant, une expérience la plus simple est utilisée pour examiner ce problème, comme la procédure suivante trois:
【Programme trois】: Expérience Byval et Byref
La copie de code est la suivante:
Sous-testcopymoire ()
Dim k comme long
k = 5
Remarque: Copymemory BYVAL VARPTR (K), 40000, 4
Debug.print k
Sub-Sub