الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]ما هو المرجع (Reference) ؟

بدأه طالبة c++ في 21 نوفمبر 2012 · 3 رد · 1,889 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ممكن شرح لreference variables مع التوضيح بالمثال

#2

السلام عليكم

توجد طريقتان للوصول إلى مجموعة بيانات مُخزنة في مساحة من الذاكرة, الطريقة الأولى تكمن في استخدام اسم تلك المساحة (اسم المتغير) و الطريقة الثانية تكمن في الإعلان عن مؤشر يُشير إلى تلك المساحة من الذاكرة.

السي++ أدخلت طريقة ثالثة للوصول إلى محتوى الذاكرة باستخدام المرجع و هي طريقة ممتازة جداً و في أغلب الأحيان تكون بديل جيد للمؤشرات من حيث تمريرها إلى الدوال, فمثلا عند التعامل مع القوائم (Linked List) إذا تم إرسال مرجع القائمة إلى الدالة فلن يكون هناك داعي لإعادة القائمة الجديدة بعد حدوث التغيرات (إضافة عُقد جديدة أو حذف أخرى مثلا ..) لأن التغيرات ستحدث على النسخة الأصلية من القائمة.

في C++, المرجع هو وسيلة يُمكن من خلالها إضافة اسم جديد لكائن معين تم الإعلان عنه مُسبقاً. و بالتالي الإعلان عن المرجع لا يعني إنشاء نسخة جديدة من الكائن المستهدف.

أيضاً, الإعلان عن المرجع لا يُلغي الاسم الأصلي للكائن و إنما يُوفر طريقة جديدة للوصول إلى محتوى هذ الأخير.

بالنسبة لطريقة الإعلان عن المرجع فهي بسيطة جداً, أول شيء نكتب اسم الكائن ثم العلامة (&) ثم اسم المرجع ثم علامة الإسناد (=) ثم القيمة الابتدائية للكائن أو المتغير.

مثال :

int anInteger = 9;//تعريف المتغير و اسناد قيمة ابتدائية له
int & aliasForInteger = anInteger;//إنشاء اسم مستعار للمتغير السابق
aliasForInteger = 4;//المتغير الأصلي أصبح يُساوي أربعة

الإعلان عن المرجع يقتضي إسناد قيمة ابتدائيه له (هذه الخطوة إلزامية و لكن ليس لها أي تأثير على قيمة المتغير, بمعنى أن المتغير سيحتفظ بقيمته الأصلية ما لم نُغيرها نحن لاحقاً).

بالنسبة للفرق بين المؤشر و المرجع فيمكن تلخيصه في النقاط التالية:

  • المؤشر عبارة عن نوع مختلف تماما عن المتغير الذي يُشير إليه.
  • أما المرجع فما هو إلا طريقة جديدة تُمكن من الوصول إلى محتوى الكائن الذي يُرافقه.
  • المرجع لا يملك وجود مستقل على عكس المؤشر.
  • الإعلان عن المؤشر يعني الإعلان عن متغير جديد يتم تخزينه في الذاكرة كباقي المتغيرات.
  • أما الإعلان عن المرجع فلا يعني سوى إضافة معرف جديد (new identifier) إلى المتغير المعنى, هذا المعرف الجديد يعرفه الــ Compiler و بالتالي لا وجود لحجز مساحة جديدة من الذاكرة على عكس المؤشر.
  • المؤشر عبارة عن متغير, مثله مثل غيره من المتغيرات حيث يُمكن تغيير محتواه أو ما يُشير إليه و نفس المؤشر يُمكن أن يُشير إلى عدة متغيرات بشكل تتابعي.
  • بينما نجد أن المرجع يكون خاص جداً بالمتغير و لا يمكن لمرجع واحد أن يُضاف إلى أكثر من متغير.

إلزامية الــ initialization و استحالة تغيير المحتوى فيما بعد و عدم حجز الذاكرة, هذه الخواص الثلاث هي ما يُميز المراجع عن المؤشرات.

بالتوفيق.

1
#3

مشكور في موازين حسناتك ان شاء الله

لكن مالفرق بينها وبين referenece parameter

#4

مفهوم الــ Reference لا يتغير.

فقط الفرق يكمن بين تعريف الــ Parameter و الــ Variable :)

مواضيع مشابهة