Byval transfere uma cópia da memória do parâmetro para o callee. Em outras palavras, o valor que é diretamente empurrado para a pilha é o valor passado.
Byref transmite o endereço real da memória do parâmetro para o callee. Em outras palavras, o que é pressionado na pilha é o endereço do conteúdo real. O Callee pode alterar diretamente o conteúdo no endereço.
Byval é os dados de origem do valor que não serão modificados
Você pode usar esse valor como sua própria variável local
Byref é o endereço de passagem, os dados de origem podem ser modificados
Sua operação nesta variável terá um impacto na variável que você passa, assim como a sensação de um ponteiro
Exemplo:
A cópia do código é a seguinte:
Subadd1 (BYVALNOASINT32)
Não = Não+100
endsub
Subadd2 (ByRefnoasint32)
Não = Não+100
endsub
privatesubbutton1_click (sendeasObject, easventArgs) handlesbutton1.click
Dimaasint32
a = 100
Add1 (a)
msgbox ("a é:" & a) 'mostra que o valor de a é 100
Add2 (a)
msgbox ("a é:" & a) 'mostra que o valor de A é 200, porque o parâmetro não no add2 é Byref, isto é,
'Passado por endereço, então após modificar o não no add2, ele causará
'O valor do parâmetro de origem A também é modificado.
Endsub
————————————————————————————————————————
3. Byval e Byref
O valor do parâmetro passado pelo BYVAL e o endereço do parâmetro passado pelo BYREF. Aqui, não precisamos distinguir entre ponteiros/endereços/referências. No VB, eles são simplesmente três declarações diferentes sobre uma coisa. Até documentos VB são misturados com estes termos (mas em C ++, precisamos distinguir entre ponteiros e referências)
Amigos que estão expostos ao programa 2 acima do Swapptr devem descobrir onde adicionar BYVAL e onde não adicionar (não adicionar Byval é usar o byref padrão do VB)
Compreender com precisão a diferença entre os valores passantes e os endereços de passagem (ponteiros) é a base para o uso correto de ponteiros no VB.
Agora, um experimento mais simples é usado para analisar esse problema, como o seguinte procedimento três:
【Programa três】: Experiência BYVAL e BYREF
A cópia do código é a seguinte:
Subestcopymemory ()
Dim K por tempo
k = 5
Nota: copymemory byval varptr (k), 40000, 4
Debug.print k
Final sub