Byval передает копию памяти параметров в Callee. Другими словами, значение, которое непосредственно втягивается в стек, является передаваемым значением.
Byref передает фактический адрес памяти параметров в Callee. Другими словами, то, что вжавается в стек, является адресом фактического контента. Callee может напрямую изменить содержимое в адресе.
Byval - это данные источника значения, которые не будут изменены
Вы можете использовать это значение в качестве собственной локальной переменной
Byref - это проходной адрес, исходные данные могут быть изменены
Ваша операция на этой переменной окажет влияние на переменную, которую вы проходите, точно так же, как ощущение указателя
Пример:
Кода -копия выглядит следующим образом:
subadd1 (byvalnoasint32)
Нет = нет+100
заканчивая
subadd2 (byrefnoasint32)
Нет = нет+100
заканчивая
PrivateButButton1_Click (senderAsObject, easVentargs) handlesbutton1.click
Dimaasint32
a = 100
Add1 (a)
msgbox («a is:» & a) »показывает, что значение a равно 100
Add2 (a)
msgbox («a is:» & a) »показывает, что значение A равен 200, потому что параметр no в add2 - это byref, то есть, есть, есть
«Прошел по адресу, поэтому после изменения нет в add2, это вызовет
«Значение параметра источника A также изменяется.
Заканчивая
————————————————————————————————
3. Byval и Byref
Значение параметра, передаваемое Byval, и адрес параметра, передаваемого Byref. Здесь нам не нужно различать указатели/адреса/ссылки. В VB это просто три разных утверждения об одном. Даже документы VB смешаны с этими терминами (но в C ++ нам нужно различать указатели и ссылки)
Друзья, которые сначала подвергаются воздействию вышеупомянутой программы 2 Swapptr, должны выяснить, где добавить Byval и где не добавлять (не добавление Byval - это использовать Byref по умолчанию VB)
Точное понимание разницы между проходящими значениями и проходящими адресами (указателями) является основой для правильного использования указателей в VB.
Теперь самый простой эксперимент используется для рассмотрения этой проблемы, например, следующая процедура три:
【Программа три】: опыт Byval и Byref
Кода -копия выглядит следующим образом:
Sub TestCopymemory ()
Dim k как долго
k = 5
Примечание: Copymemory Byval Varptr (K), 40000, 4
Debug.print K.
Конец суб