ما هو المؤشر في ذاكرة الكمبيوتر pointer

اقرأ في هذا المقال


ما هو المؤشر pointer؟

المؤشر هو متغير يحمل عنوانًا في ذاكرة الكمبيوتر، حيث يحصل المؤشر على اسم، متغير المؤشر يحمل عنوان جزء معين من الذاكرة في الكمبيوتر؛ بمعنى آخر، يشير المؤشر إلى مكان معين في الذاكرة، في جوهره، المؤشر ليس أكثر من متغير يحمل رقمًا يمثل عنوان موقع ذاكرة معين.

المؤشرات والذاكرة:

لنفكر في الذاكرة على أنها كتلة كبيرة من مساحة التخزين حيث يمكننا وضع المعلومات التي نريد استردادها لاحقًا (وهذا ليس بعيدًا عن الحقيقة)، لنفترض أن لدينا برنامجًا بسيطًا على النحو التالي:

{ ;int steve;  steve = 220 }()void main

ماذا يحدث عندما نقوم بتشغيل هذا البرنامج؟ أولاً، يخصص الكمبيوتر جزءًا صغيرًا من الذاكرة للاحتفاظ بالعدد الصحيح (steve)، ثم يخزن القيمة (220) في هذا المتغير.

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

عناوين الذاكرة Memory Addresses:

مفهوم العناوين (Addresses) في مصطلحات الكومبيوتر، هو كل قطعة من ذاكرة الكمبيوتر مرقمة بحيث يمكن العثور عليها بسهولة، التمثيل التصويري الأفضل للذاكرة، على النحو التالي:

memory4

في هذا الشكل، يمثل كل مربع بايتًا واحدًا من الذاكرة، والأرقام الموجودة أسفل كل صندوق هي العناوين، وكل رقم يتوافق مع بايت واحد، بمعنى آخر، يمكننا العثور على أي بايت في الذاكرة والوصول إليه بمجرد معرفة عنوانه، (تذكر، أن البايت هو “8 بتات”، والبت هي أصغر وحدة تخزين في الكمبيوتر، وتخزن إما 0 أو 1)، دعنا نعود إلى المثال أعلاه، ولنفترض أنه تم تخزين (Steve) في العنوان (728) في الذاكرة وتم تخزين القيمة (220) في (steve):

memory5

لماذا يغطي المتغير (steve) البايتات (728 و 729 و 730 و 731)؟، ولماذا لم نقوم بتخزينه في (728) فقط؟، تذكر أن (steve) هو عدد صحيح، وأن العدد الصحيح في معظم أجهزة الكمبيوتر الحديثة هو نوع بيانات (4 بايت)، ممّا يعني أن عددًا صحيحًا واحدًا يستغرق (4 بايت أو 32 بتًا) ليتم تخزينه، عندما نقول أن عنوان (steve) هو (728)، فإن ما نعنيه هو أن (steve) يبدأ من (728) ويستمر خطيًا عبر الذاكرة لأكبر عدد من البايتات حسب الحاجة، لو كان (steve) (character)، والذي يكون في معظم أجهزة الكمبيوتر من نوع بيانات بايت واحد، لكان قد تم تخزين (steve) بالكامل في عنوان الذاكرة (728).

وبالعودة إلى موضوع المؤشرات، مثلما أن الغرض من متغير (steve) هو تخزين عدد صحيح، فإن الغرض من متغير المؤشر هو تخزين عنوان ذاكرة، وغالبًا ما يكون عنوان متغير آخر.

المصدر: ? What is a pointer exactlyPointer BasicsPointers in C Programming: What is Pointer, Types & ExamplesC Pointers


شارك المقالة: