C++المؤشرات
- مفهوم المؤشرات C++
- تعريف مؤشر في C++
- تحديد الشيء الذي يتم الإشارة إليه في C++
- تغيير قيمة الشيء الذي يشير إليه المؤشر في C++
- أمثلة حول مزايا استخدام المؤشرات في C++
مفهوم المؤشرات C++
في الدرس السابق تعرفنا على المراجع ( References ) و تعلمنا كيف أنها تستخدم بهدف جعلنا قادرين على الوصول إلى الأشياء المعرفة في الذاكرة بشكل مباشر.
المؤشرات ( Pointers ) تستخدم أيضاً للوصول لأي شيء يتم تعريفه في الذاكرة و هي تعطينا المزيد من المزايا في التحكم.
الفرق بين المرجع و المؤشر
الفرق الأساسي بينهما هو أن المؤشر يقوم بحجز مساحة في الذاكرة لتخزين عنوان الشيء الذي يؤشر إليه.
بالإضافة إلى ذلك, فإن المؤشر يمكنه الإشارة لأي شيء موجود في الذاكرة في أي وقت و لست مجبراً على تحديد الشيء الذي يشير إليه لحظة إنشاءه.
في هذا الدرس ستفهم الفرق بين المراجع و المؤشرات بالنسبة للذاكرة و ستتعرف على المزايا الإضافية التي توفرها المؤشرات.
تعريف مؤشر في C++
لتعريف مؤشر جديد نستخدم الرمز * مع الإشارة إلى أن نوع المؤشر يجب أن يكون نفس نوع الشيء الذي سيشير له في الذاكرة.
إذا اردنا تعريف مؤشر نوعه int و إسمه x
فعندنا ثلاث خيارات كالتالي.
الآن, لتعريف مؤشر و جعله يشير لقيمة شيئ موجود في الذاكرة, يجب أن نقوم بتمرير عنوان هذا الشيء كقيمة للمؤشر و عندها سيصبح المؤشر قادر على الوصول لقيمته و عنوانه كما سنرى في المثال التالي.
مثال
سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل.
الصورة التالية تظهر كيف تم تخزين عنوان و قيمة المتغير language
و المؤشر ptr
في الذاكرة.
من المهم جداً أن تلاحظ الطريقة التي يتم فيها إنشاء المؤشر في الذاكرة حتى تعرف كيف تتعامل معه بسهولة.
- المؤشر
ptr
تم تخصيص مساحة خاصة له في الذاكرة و هذه المساحة لها عنوان و قيمة أيضاً. - قيمة المؤشر
ptr
هي عنوان المتغيرlanugage
في الذاكرة, و هذا يعني أن قيمة المؤشر دائماً تكون عنوان الشيء الذي يشير إليه في الذاكرة.
بالنسبة للتعامل مع المؤشر فلاحظنا التالي:
- نكتب إسم المؤشر فقط في حال أردنا الوصول لقيمته, كمثال
ptr
- نضع
&
قبل إسم المؤشر في حال أردنا الوصول لعنوانه في الذاكرة, كمثال&ptr
- نضع
*
قبل إسم المؤشر في حال أردنا الوصول لقيمة الشيئ الذي يشير إليه, كمثال*ptr
تحديد الشيء الذي يتم الإشارة إليه في C++
في المثال السابق لاحظنا أن المؤشر في الذاكرة يشبه كثيراً الشيء الذي يشير إليه حيث يملك قيمة و عنوان خاص في الذاكرة.
و لاحظنا أيضاً أننا في المؤشر لا نضع قيم عادية, حيث أن قيمته تكون عنوان الشيء الذي يشير إليه في الذاكرة و الذي من خلاله يمكننا الوصول لقيمته.
الآن إذا أردت جعل المؤشر يشير إلى شيء آخر موجود في الذاكرة, فكل ما عليك فعله هو تمرير عنوان الشيء الآخر له كقيمة.
في المثال التالي قمنا بتعريف متغيرين إسمهما x
و y
.
بعدها قمنا بتعريف مؤشر إسمه ptr
جعلناه يشير للمتغير x
و عرضنا التي يشير إليها.
ثم جعلنا ptr
يشير للمتغير y
و عرضنا القيمة التي يشير إليها.
مثال
سنحصل على النتيجة التالية عند التشغيل.
الفيديو التالي يظهر كيف تم تغيير قيمة المؤشر ptr
حيث تم جعله يشير لعنوان المتغير x
و من ثم يشير لعنوان المتغير y
.
تغيير قيمة الشيء الذي يشير إليه المؤشر في C++
في المثال التالي قمنا بتعريف متغير إسمه x
قيمته 1
و مؤشر إسمه ptr
يشير للمتغير x
.
من خلال المؤشر ptr
قمنا بتغيير قيمة المتغير x
و من بعدها قمنا بطباعة قيمته للتأكد.
مثال
سنحصل على النتيجة التالية عند التشغيل.
أمثلة حول مزايا استخدام المؤشرات في C++
المثال الأول
هنا وضعنا مثال حول كيفية إنشاء مؤشر لا يملك قيمة ( Null Pointer ) بالإضافة إلى كيفية التشييك على المؤشر لمعرفة ما إن كان يملك قيمة أم لا.
المثال الثاني
هنا وضعنا مثال حول كيفية جعل المؤشر يشير لقيم عناصر المصفوفة باستخدام العوامل الحسابية ( Arithmetic Operator ) الأربعة -
, --
, +
, ++
.
المثال الثالث
المثال التالي مهم جداً و منه ستتعلم كيف تنشئ دالة تأخذ باراميتر عبارة عن مؤشر و كيف نقوم بتمرير قيمة للبارامتير عند استدعاءها.