Byval โอนสำเนาของหน่วยความจำพารามิเตอร์ไปยัง Callee กล่าวอีกนัยหนึ่งค่าที่ถูกผลักเข้าไปในสแต็กโดยตรงคือค่าที่ผ่าน
Byref ส่งที่อยู่จริงของหน่วยความจำพารามิเตอร์ไปยัง Callee กล่าวอีกนัยหนึ่งสิ่งที่กดลงในสแต็กคือที่อยู่ของเนื้อหาจริง Callee สามารถเปลี่ยนเนื้อหาในที่อยู่ได้โดยตรง
Byval เป็นข้อมูลแหล่งที่มาที่จะไม่ได้รับการแก้ไข
คุณสามารถใช้ค่านี้เป็นตัวแปรท้องถิ่นของคุณเอง
Byref เป็นที่อยู่ผ่านข้อมูลแหล่งที่มาอาจได้รับการแก้ไข
การทำงานของคุณในตัวแปรนี้จะมีผลกระทบต่อตัวแปรที่คุณส่งผ่านเช่นเดียวกับความรู้สึกของตัวชี้
ตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
Subadd1 (Byvalnoasint32)
ไม่ = ไม่+100
enddub
subadd2 (byrefnoasint32)
ไม่ = ไม่+100
enddub
PrivatesubButton1_Click (SenderAsObject, EasVentArgs) HARDLESBUTTON1.CLICK
dimaasint32
A = 100
add1 (a)
msgbox ("A คือ:" & a) 'แสดงให้เห็นว่าค่าของ A คือ 100
add2 (a)
msgbox ("A คือ:" & a) 'แสดงให้เห็นว่าค่าของ A คือ 200 เนื่องจากพารามิเตอร์ NO ใน Add2 คือ Byref นั่นคือ
'ผ่านที่อยู่ดังนั้นหลังจากแก้ไข NO ใน ADD2 มันจะทำให้เกิด
'ค่าของพารามิเตอร์แหล่งที่มาถูกแก้ไข
enddub
-
3. Byval และ Byref
ค่าพารามิเตอร์ส่งผ่านโดย Byval และที่อยู่ของพารามิเตอร์ที่ส่งผ่านโดย Byref ที่นี่เราไม่จำเป็นต้องแยกความแตกต่างระหว่างพอยน์เตอร์/ที่อยู่/การอ้างอิง ใน VB พวกเขาเป็นเพียงสามข้อความที่แตกต่างกันเกี่ยวกับสิ่งหนึ่ง แม้แต่เอกสาร VB ก็ผสมกับข้อกำหนดเหล่านี้ (แต่ใน C ++ เราจำเป็นต้องแยกแยะระหว่างพอยน์เตอร์และการอ้างอิง)
เพื่อนที่สัมผัสกับโปรแกรม Swapptr 2 ด้านบนต้องคิดออกว่าจะเพิ่ม byval ที่ไหนและที่จะไม่เพิ่ม (ไม่เพิ่ม Byval คือการใช้ Byref เริ่มต้นของ VB)
การทำความเข้าใจความแตกต่างอย่างแม่นยำระหว่างค่าที่ผ่านและที่อยู่ที่ผ่าน (พอยน์เตอร์) เป็นพื้นฐานสำหรับการใช้พอยน์เตอร์ที่ถูกต้องใน VB
ตอนนี้การทดลองที่ง่ายที่สุดใช้เพื่อดูปัญหานี้เช่นขั้นตอนต่อไปนี้สาม:
【โปรแกรมสาม】: ประสบการณ์ Byval และ Byref
การคัดลอกรหัสมีดังนี้:
testcopymemory ()
หรี่
k = 5
หมายเหตุ: COPYMEMORY BYVAL VARPTR (K), 40000, 4
debug.print k
สิ้นสุดย่อย