Byval transfiere una copia de la memoria del parámetro a la Callee. En otras palabras, el valor que se empuja directamente a la pila es el valor aprobado.
Byref transmite la dirección real de la memoria del parámetro a la Callee. En otras palabras, lo que se presiona en la pila es la dirección del contenido real. El Callee puede cambiar directamente el contenido en la dirección.
BYVAL son los datos de la fuente de valor que no se modificarán
Puede usar este valor como su propia variable local
Byref es la dirección de aprobación, los datos de origen pueden modificarse
Su operación en esta variable tendrá un impacto en la variable que transfiere, al igual que la sensación de un puntero
Ejemplo:
La copia del código es la siguiente:
Subadd1 (byvalnoasint32)
No = No+100
Endsub
Subadd2 (ByrefnoasInt32)
No = No+100
Endsub
privatesubbutton1_click (streerasObject, EASSVENSARGS) HANDLESBUTTON1.Cluce
dimaasint32
a = 100
Add1 (a)
msgbox ("a is:" & a) 'muestra que el valor de A es 100
Add2 (a)
msgbox ("a is:" & a) 'muestra que el valor de A es 200, porque el parámetro no en ad2 es byref, es decir,
'Aprobado por dirección, por lo que después de modificar NO en ADD2, causará
'El valor del parámetro de fuente A también se modifica.
Endsub
—————————————————————————————————————————
3. Byval y Byref
El valor del parámetro aprobado por BYVAL, y la dirección del parámetro pasada por Byref. Aquí, no tenemos que distinguir entre punteros/direcciones/referencias. En VB, son simplemente tres declaraciones diferentes sobre una cosa. Incluso los documentos VB se mezclan con estos términos (pero en C ++, necesitamos distinguir entre punteros y referencias)
Los amigos que primero están expuestos al Swapptr del Programa 2 anterior deben averiguar dónde agregar BYVAL y dónde no agregar (no agregar BYVAL es usar el Byref predeterminado de VB)
Comprender con precisión la diferencia entre los valores de paso y las direcciones de paso (punteros) es la base para el uso correcto de punteros en VB.
Ahora, se utiliza un experimento más simple para ver este problema, como el siguiente procedimiento tres:
【Programa tres】: Experiencia Byval y Byref
La copia del código es la siguiente:
Sub testCopyMemory ()
Dim K tanto tiempo
k = 5
Nota: Copymemory Byval Varptr (k), 40000, 4
Debug.print k
Final