Byval mentransfer salinan memori parameter ke callee. Dengan kata lain, nilai yang secara langsung didorong ke dalam tumpukan adalah nilai yang ditularkan.
Byref mengirimkan alamat aktual dari memori parameter ke callee. Dengan kata lain, apa yang ditekan ke dalam tumpukan adalah alamat konten yang sebenarnya. Callee dapat secara langsung mengubah konten dalam alamat.
BYVAL adalah data sumber nilai yang tidak akan dimodifikasi
Anda dapat menggunakan nilai ini sebagai variabel lokal Anda sendiri
Byref adalah alamat pass, data sumber dapat dimodifikasi
Operasi Anda pada variabel ini akan berdampak pada variabel yang Anda lewati, seperti perasaan pointer
Contoh:
Salinan kode adalah sebagai berikut:
subadd1 (byvalnoasint32)
NO = NO+100
endsub
subadd2 (byrefnoasint32)
NO = NO+100
endsub
privatesubbutton1_click (senderasObject, easventargs) handlesbutton1.click
DimAasInt32
a = 100
Add1 (a)
msgbox ("a is:" & a) 'menunjukkan bahwa nilai A adalah 100
Add2 (a)
msgbox ("a is:" & a) 'menunjukkan bahwa nilai a adalah 200, karena parameter no di add2 adalah byref, yaitu,
'Disahkan berdasarkan alamat, jadi setelah memodifikasi tidak ada di add2, itu akan menyebabkan
'Nilai parameter sumber A juga dimodifikasi.
Endsub
——————————————————————————————————————-
3. Byval dan Byref
Nilai parameter yang dilewati oleh BYVAL, dan alamat parameter yang dilewati oleh Byref. Di sini, kita tidak perlu membedakan antara pointer/alamat/referensi. Di VB, mereka hanyalah tiga pernyataan berbeda tentang satu hal. Bahkan dokumen VB dicampur dengan istilah -istilah ini (tetapi dalam C ++, kita perlu membedakan antara pointer dan referensi)
Teman -teman yang pertama kali terpapar dengan program di atas 2 Swapptr harus mencari tahu di mana harus menambahkan Byval dan di mana tidak untuk menambahkan (tidak menambahkan Byval adalah dengan menggunakan byref default dari VB)
Secara akurat memahami perbedaan antara nilai yang lewat dan alamat yang lewat (pointer) adalah dasar untuk penggunaan pointer yang benar di VB.
Sekarang, percobaan paling sederhana digunakan untuk melihat masalah ini, seperti prosedur berikut tiga:
【Program Tiga】: Pengalaman Byval dan Byref
Salinan kode adalah sebagai berikut:
Sub testcopymemory ()
Redup
k = 5
Catatan: Copymemory Byval Varptr (K), 40000, 4
Debug.Print k
Akhir sub