++C

الفرق بين pass by value & pass by references 

الكاتب: Mr.Aziz

تاريخ النشر: 2023-03-07 08:38:53

اهلآ وسهلآ 

 

بالدروس السابقة تعلمنا عن الدوال و المرجع و struct 

ولكن هذي المره سنتكلم عن الفرق بالمرور المعلومات بين References و بين value.

 

by value: هو يتم تمرير القيمة من خلال function call الى دالة وحده فقط. لايمكن تمرير القيمة الى أكثر من دالة 

 

by References: يتم نسخ القيمة الى أكثر من دالة لامانع من ذالك و بنفس الوقت يتم حفظ القيمة الأصلية.

 

هنا عملت برنامج بسيط لنرى الفرق بينهم 

أولآ بين السطر 5 و 7 عملت struct ليتم تخزين القيمة التي موجوده في المتغيرات 

 

ثم أنشأت دالتين الى هم أستقبال المعلومة info و يتم إظهار المعلومة Display 

 

بداخل main انا فقط وضعت داخل القوسين أسم struct لاني أريد تمرير القيمة الى المتغير الموجود بداخل strcut.

 

ستلاحظ الأن لدينا دالتين 

info: يتم كتابة الأسم والعمر من قبل المستخدم  و الأن تم حفظ القيمة بداخل المتغيرات التي موجودة في struct.

 

بعد كذا انشئت دالة display ليتم عرض القيم التي مخزنة في المتغيرتين هم name و age

 

pass by value المعلومات ستقف الى الدالة info فقط. لايمكن أن تستنسخ مثل اي دالة التي تم شرحها بالدروس السابقة.

 

لو كتبت طباعة بداخل هذي الدالة Info ستظهر المعلومات مثل ماهي.

 

ستلاحظ في السطر 24 تم أمر الطباعة بداخل الدالة info 

وستلاحظ النتيجة تحت هو 

your name is: aziz your age is 43  

 

هذا تعني pass by value.

 

اممم ماذا لو مررنا القيم الى الدالة display 

ماذا سيحدث القيم التي كانت موجوده ؟

 

تعال نشوف النتيجة

ستلاحظ الأن تم أمر الطباعة في الدالة display 

 

لما عملنا run  ستلاحظ النتيجة هو لايوجد شي أو فارغ

your name is:   your age is : 642.....

 

هذي القيمة لامعنى لها. بسبب القيمة لم يتم أستنساخ الى دالة اخرى و فهمنا القيم لن يتم أستنساخ و فقط يعرض من أول دالة فقط.

 

طيب مالحل لذالك؟

نجي شي اسمه pass by refences 

من خلال وضع العلامة &  قبل المتغير thismyname  

يجب أن تضعه في info ليتم أستنساخ المعلومات التي تم تمريره في دالة info الى دالة Display 

 

مثل هكذا:

 

ستلاحظ الأن بالسطر 9 و 19 تم وضع علامة & ليتم أستنساخ القيم الى دالة بعدها.

لما المستخدم كتب الأسم ثم العمر و ثم تم طباعتها ف الدالة display 

سيظهر النتيجة هو 

your name is: aziz your Age is 33

 

هذا يسمى refences لسبب وجود أستنساخ من القيمة التي قبلها.

 

هنا صورة بشكل أوضح

 

 

ستلاحظ في pass by value 

تم نقل القيمة الى مكان اخر فقط.

ولكن pass by refences 

يتم أستنساخ القيمة الى مكان أخر ولكن موجود بالمتغير الأصلي.