يقوم Byval بنقل نسخة من ذاكرة المعلمة إلى Callee. بمعنى آخر ، القيمة التي يتم دفعها مباشرة إلى المكدس هي القيمة التي تم تمريرها.
يقوم Byref بنقل العنوان الفعلي لذاكرة المعلمة إلى Callee. بمعنى آخر ، ما يتم الضغط عليه في المكدس هو عنوان المحتوى الفعلي. يمكن لـ Callee تغيير المحتويات في العنوان مباشرة.
Byval هي بيانات مصدر القيمة التي لن يتم تعديلها
يمكنك استخدام هذه القيمة كمتغير محلي خاص بك
BYREF هو عنوان المرور ، يمكن تعديل بيانات المصدر
سيكون لعملياتك على هذا المتغير تأثير على المتغير الذي تنقله ، تمامًا مثل الشعور بالمؤشر
مثال:
نسخة الكود كما يلي:
subadd1 (byvalnoasint32)
لا = لا+100
ينتهي
subadd2 (byrefnoasint32)
لا = لا+100
ينتهي
Privatesubbutton1_click (senderasobject ، easventargs) handlesbutton1.click
Dimaasint32
أ = 100
add1 (أ)
يوضح msgbox ("A IS:" & a) أن قيمة A هي 100
add2 (أ)
يوضح msgbox ("a is:" & a) أن قيمة A هي 200 ، لأن المعلمة no in add2 هي byref ، وهذا هو ،
"تم تمرير العنوان ، لذلك بعد تعديل NO في Add2 ، سوف يسبب ذلك
"يتم تعديل قيمة المعلمة المصدر A أيضًا.
ينتهي
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————–
3. Byval و Byref
قيمة المعلمة التي مرت بواسطة Byval ، وعنوان المعلمة التي تم تمريرها بواسطة BYREF. هنا ، ليس علينا التمييز بين المؤشرات/العناوين/المراجع. في VB ، هم ببساطة ثلاثة بيانات مختلفة عن شيء واحد. حتى مستندات VB مختلطة مع هذه المصطلحات (ولكن في C ++ ، نحتاج إلى التمييز بين المؤشرات والمراجع)
يجب على الأصدقاء الذين يتعرضون لأول مرة للبرنامج أعلاه 2 swapptr معرفة مكان إضافة Byval وأين لا يمكن إضافته (عدم إضافة Byval هو استخدام BYREF الافتراضي لـ VB)
إن فهم الفرق بين القيم المارة والعناوين (المؤشرات) بدقة هو الأساس للاستخدام الصحيح للمؤشرات في VB.
الآن ، يتم استخدام أبسط تجربة للنظر في هذه المشكلة ، مثل الإجراء التالي الثالث:
【البرنامج الثالث】: تجربة Byval و Byref
نسخة الكود كما يلي:
testcopymemimory ()
قاتمة K طالما
ك = 5
ملاحظة: copymemory byval varptr (k) ، 40000 ، 4
Debug.print K.
نهاية الفرعية