ما هو المؤشر في C؟
الفكرة الأساسية
قيمة المؤشر يمكن أن تشير إلى متغير أو كائن من خلال عنوانه في الذاكرة. نوع المؤشر يوضح نوع الكائن الذي يُقصد الوصول إليه. العنوان نفسه مختلف عن القيمة الموجودة في هذا المكان.
عامل أخذ العنوان يحصل على عنوان الكائن، وفك الإشارة يصل إلى الكائن من خلال مؤشر صالح. هذه العمليات لا تجعل عنوانًا غير صالح أو متغيرًا انتهى عمره قابلًا للاستخدام.
تتبع متغيرًا واحدًا
#include <stdio.h>
int main(void) {
int score = 7;
int *p = &score;
*p = 9;
printf("%d\n", score);
return 0;
}
الناتج 9. المتغير score موجود داخل main، والمؤشر p أخذ عنوانه. التعديل من خلال p يغير نفس المتغير score، ولا ينشئ نسخة ثانية منه.
| التعبير | معناه في المثال |
|---|---|
| score | القيمة الصحيحة المخزنة |
| &score | عنوان المتغير |
| p | قيمة المؤشر الذي يشير إليه |
| *p | الوصول إلى القيمة عن طريق المؤشر |
لا نحتاج عرض رقم العنوان نفسه لفهم العلاقة، لذلك يركز المثال على التغيير في القيمة.
المؤشر غير الفارغ ليس ضمانًا كافيًا
المؤشر الفارغ لا يشير إلى كائن صالح للاستخدام. لكن فحص أنه غير فارغ ليس كل شروط الأمان؛ فقد يشير إلى متغير انتهى عمره أو إلى مكان خارج المجال المسموح.
قبل الوصول، تحتاج كائنًا صالحًا من نوع مناسب، وعمرًا لم ينتهِ، وحدودًا تحترمها. تعرف ذلك من طريقة حصولك على المؤشر واستخدامه.
افهم العمر قبل الحجز الديناميكي
المتغير المحلي ينتهي عمره عادة عند انتهاء الكتلة التي ينتمي إليها. إعادة عنوانه من دالة لا تمد عمره. استخدام العنوان لاحقًا كأن المتغير ما زال موجودًا خطأ.
ابدأ بمؤشرات إلى متغيرات عمرها واضح كما في المثال. الحجز الديناميكي يضيف مسؤوليات عن الملكية والتحرير، لذلك تعلم هذه المسؤوليات قبل نسخ أوامر الحجز.
المصفوفة ليست هي المؤشر
في تعبيرات كثيرة تتحول المصفوفة إلى مؤشر لأول عنصر، لكن المؤشر لا يحمل عدد العناصر تلقائيًا. الدالة التي تعمل عليه تحتاج غالبًا طولًا منفصلًا أو اتفاقًا واضحًا للحدود.
معرفة العنوان وحدها لا تكفي لمعالجة مجموعة كاملة. حدد الطول، وتأكد أن كل فهرس داخل المجال الصحيح.
تمرين بسيط
بعد تغيير score إلى 9 في المثال، اجعله 12 مباشرة ثم اقرأ من خلال p. المتوقع أن تقرأ 12، لأن التعبيرين يصلان إلى نفس الكائن.
اشرح ذلك قبل إضافة مؤشر آخر. التمييز بين قيمة المؤشر والكائن المشار إليه وعمره أساس مهم لفهم الدوال والمصفوفات وهياكل البيانات لاحقًا.
مراجع وتفاصيل الكورسات
المراجع التالية تساعد على متابعة التعلم. الأمثلة والتمارين في هذا المقال تعليمية، وتفاصيل الكورسات تُراجع من الكتالوج.