++C

ماهو 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

 

وأنتهينا