ماهو Pointer في C++
الكاتب: Mr.Aziz
تاريخ النشر: 2023-03-07 06:37:36
اهلآ وسهلآ
المره السابقة شرحنا عن الدرس المرجع (References) الى هو يتم نسخ القيمة من مكان الى مكان أخر فقط.
ولكن هالمره سننقل القيمة من المتغير القديم الى متغير جديد بدون يتم النسخ بما يعني نستطيع إعادة أستخدام المتغير القديم عن طريق Pointer.
ماهو Pointer؟ هو يتم نقل القيمة من مكان في الذاكرة الى مكان اخر. للعلم Link list يختلف عن pointer و في هذا الدرس لن نتكلم عن Link list.
مثال: لو عندنا متغير بأسم A و متغير جديد بأسم B. نستطيع ننقل القيمة التي موجوده في A الى B
ولكن المتغير A تصبح نفس ماهي ولكن نستطيع إعادة أستخدامه بالقيمة أخرى عن طريق كلمة محجوزه هي (new datatype).
أسلوب الكتابة في Pointer.
ستلاحظ في السطر 9 وضعنا متغير جديد و له قيمة هو 120.
بالسطر 11 وضعنا علامة النجمة (*) بعد int ثم المتغير جديد بأسم ptr
هنا تم أنشاء متغير عباره عن pointer و يأخذ القيمة و يحتفظ بها.
ستلاحظ بوجود &number هذا يعني القيمة التي موجودة بها تم انتقال الى المتغير pointer و ليس النسخ مثل المره السابقة.
و لو عرضنا النتيجة سوف تلاحظ بهذا الشكل.
ستلاحظ الأن يوجد ثلاث طباعة من مختلف المتغيرات
اولآ بالسطر 13 تم طباعة قيمة التي موجودة في متغير number و القيمة هي 120
بالسطر 16 تم طباعة الرقم الذي موجود في مكان بالذاكرة لانه ستلاحظ وضعنا علامة (&) هذا تعني إظهار رقم الذاكرة التي يتواجد به القيمة 120
ptr بالسطر 19 سيظهر نفس الرقم التي كان موجود هذا يعني تم أنتقال القيمة مع رقم الذاكرة من المغير number الى ptr
أصبح الأن ptr يتملك هذي القيمة 120 و بنفس الوقت number بأمكان نضع له قيمة أخرى.
طيب! ممكن الفكرة ماوضحت عندك كويس
وش رايك نتلاعب في القيمة و نشوف هل القيمة التي موجوده في number تتغير ولالا لو غيرنا القيمة التي موجوده في *ptr ؟
الأن عندنا بهذا الشكل.
و أحفظ رقم memory address جيدآ لانه نحتاجها الأن لكي نختبر pointer ؟
هو 0x61ff08
أحنا عرفنا ptr لديه قيمة هو 120
ولكن مارأيكم نغير القيمة الى 500؟ ونرى المتغير number هل يتم تغيير ولالا!
نشوف النتيجة
الأن بالسطر 16 تم عمل قيمة جديدة في ptr و القيمة هي 500
ولكن السؤال لك هل القيمة سوف تتغير في المتغير number أم لا؟ تذكر أني قلت لك أحفظ مكان memory address جيدآ :) وفكر جيد؟
هل حصلت على أجابة؟
الاجابة هي نعم سوف يتغير كما التالي
هنا الشرح
بالسطر 16 تم وضع قيمة جديدة هي 500
بالسطر 18 تم وضع طباعة عشان نوضح وين النتيجة بضبط second output
لما عرضنا النتيجة عن طريق *ptr ستلاحظ تغير القيمة من 120 الى 500. للعلم لو كتبت ptr فقط سيظهر لك memory address و يجب أن تكتب قبلها نجمة (*) بحيث يظهر لك القيمة.
بعد كذا في السطر 19 عرضنا المتغير number لنرى القيمة بداخلها
اوه أصبحت 500 كيف كذا؟ لم نغير اي شي فيها!!
تتذكرون memory address هذا 0x61ff08
المتغير number و ptr هم في نفس المكان بضبط لهذا سبب عند تغير القيمة في ptr سوف يتغير في number مهم ماكان.
طيب كيف نحل هذي المشكلة ؟
نعمل له مكان جديد في الذاكرة او memory address ولكن كيييف؟
بهذي الطريقة
بالسطر 16 علينا أن نضع كلمة محجوزه هي new int
هذا يعني تم تغير المتغير ptr من مكان الى كان عليه في memory address الى مكان أخر
بما يعني كان موجود في 0x61ff08 والأن أصبح في 0x10e7e88 هذا مكان له جديد بالذاكرة
ستلاحظ بالسطر 20 لما عملنا الطباعة للمتغير أصبح القيمة 120 وليس على القيمة الجديدة هي 500 ليش؟
بسبب number لم يعد موجود في ذاكرة جديدة او memory address
لهذا السبب بكل مره تحتاج تعمل هذي طريقة لو حاب تغير القيمة مثلآ في Link list
وأنتهينا