الخميس، 26 مارس 2015

*الجزء الثالث

*الجزء الثالث
بقية مواضيع أساسيات المؤشرات والعلاقة بين المؤشرات والمصفوفات :
المؤشرات الهائمـة أو الطائشـة(Pointer stray):
لن أخـوض طويلاً في هـذا الموضـوع ؛ ولـم أضـع هـذه الفقـرة إلا لأنبــه علـى
أساليب البرمجـة الآمنـة ، ينشأ المؤشر الهائم حينما تقوم بالإعلان عـن أحـد
المؤشرات دون أن تقوم بتهيئتـه ؛ تأكـد يجب تهيئة جميع المؤشرات بقيمـة أو
بعـنوان ؛ احذر من عـدم تهيئتهـا ؛ أيضـاً لا تـنس أنـك حينمـا تلغــي أي مؤشـر
فقم بإسناد القيمة صفر إليه فوراً ؛ فمن المعروف أنك حينما تلغي أي مؤشـر
فإنـه سيبقى يشير إلى منطقـة الذاكرة السابقـة ، ومكمن الخــطورة هــنا ، أ
ن المترجم ربما سيحجز مكـان لمتغير جديد في تلك المنطقـة وتصـور مالـذي
يحدث ، إن الذي سيحدث هــو أن يتوقـف البرنـامج أو أن تحـدث لـه حالـة مـن
الجـنون فينطلق بلا توقف (قد يوقف نظام التشغيل) ؛ ربما تتعجب من الـذي
أقـوله وتصفني بأني مبالغ ؛ لكن حينمـا تكتـب كــوداً طـويلاً يتعــدي الألـف أو
حتى المائة سطر وتتعب عليه ثم عـند تنفيذ البرنامج يتوقف بـلا سـبب وتظـل
تبحث عـن هذا الخطأ السـخيف (الـذي لا ينبهــك المتـرجم عــنه) ؛ سـيجعلك
تشك في أن هـناك أخطاء منطقيـة فـي البرنـامج أو أن الكمبيـوتر قـد انتهــى
زمنـه مما يجبرك إما أن تترك البرنامج أو أن تعيد كتابته ... لذلك فمـن الأسـلم
لك أن تلتزم بمباديء البرمجـة الآمنـة في كل شـيء حتـى تقاليـد التسميــة
التي تتبعها لمتغيراتك ومؤشراتك.
المؤشرات الثابتـة :
لن أتعرض حالياً لهذا الموضوع بشـكل دقيـق بـل سأتركــه حينمـا نصـل إلـى
التطبيقات الفعلية للبرمجـة الكائنيـة .. ولكـن مـن الضـروري أن تفهــم مـاهي
المؤشرات الثابتـة.
حينمـا تسـتخدم الكلمـة الدليليــة const فـي أي شــيء فإنهـا تعــني ثابـت ؛
والتـي تخبـر المتـرجم أن لا يغيـر مـن قيمــة هـذا المتغيـر أو المؤشــر الثابـت
وبالتالي فحينما تغير من قيمة هذا الثابت فسيرسـل المتـرجم رسـالة خطـأ ؛
الآن أدرس الأمثلة التاليـة:
const int *pFirst;
int *const pSecond;
const int *const pThird;
كما ترى في السطر الأول ؛ المؤشر لا يمكن تغيير القيمة التـي يشـير إليهـا ؛
من الممكن أن نغير من عـنوانـه.
في السطر الثاني: من الممكن تغيير المتغير لكن عـنوان الذاكرة الـذي يشـير
إليه المؤشر لا يمكن تغييره.
في السطر الثالث لا يمكن تغيير المتغير ولا العـنوان الذي يشير إليه المؤشر.
المؤشر void :
هـناك أيضاً بعض الخـواص في المؤشرات ألا وهـي المؤشر void ، بإمكانك
أن تقوم بالإعلان عـن مؤشر من النـوع void ، هـكذا:
void *pointer;
المؤشرات والمصفوفات:
العلاقـة بـين المصـفوفات والمؤشــرات فـي لغــة السـي بلـس بلـس علاقـة
حميمة للغاية بل إن المصفوفات تعتبر قريبة جداً للمؤشرات بشكل لا يصدق.
لو افترضنا أن لديك هذه المصفوفة:
int array[10];
ولنفرض أنك قمت بهذه العـملية:
int *p= & array[0];
فحينها سيشير المؤشر pArray إلى أول عـنصر من المصفوفة.
وكما تعلمنـا فـإن المصـفوفة عبـارة عــن بيانـات متجـاورة مـع بعضـها الـبعض
وبالتالي فإن السطر التالي صحيح:
cout << *(p+1);
يقـوم هـذا السـطر بطباعــة القيمـة التـي فـي منطقـة الـذاكرة التـي بجانـب
المؤشر p والتي هي العـنصر الثاني من المصفوفة ، وهكذا فبإمكانك طباعة
جميع عـناصر المصفوفة بتلك الطريقة.

ليست هناك تعليقات:

إرسال تعليق