الدرس 21: مؤشرات الدوال
ليست المتغيرات وحدها هي التي تسكن الذاكرة — بل شيفرة الدوال أيضًا، لذا فإن للدوال عناوين كذلك. يخزّن مؤشر الدالة عنوانًا كهذا: int (*op)(int, int); — والأقواس حول (*op) حاسمة؛ فبدونها يصبح هذا تصريحًا مختلفًا تمامًا. بعد op = add; يمكنك استدعاء op(3, 4) تمامًا كدالة عادية، وباستنادٍ واحد تبدّل الس
مؤشر الدالة هو زر الاتصال السريع في الهاتف: الزر نفسه لا يستطيع التحدث، بل يخزّن فقط 'بمن نتصل'. يمكنك تعيينه لأمك أو للمطعم — والضغط عليه (الاستدعاء) يصل إلى من هو مخزَّن فيه في تلك اللحظة.
- مؤشر الدالة
- متغير يخزّن عنوان دالة — يمكنك الاستدعاء من خلاله وتغيير ما يشير إليه.
- تشريح التصريح int (*op)(int, int);
- op هو مؤشر إلى دالة تأخذ قيمتين من نوع int وتُرجِع int. الأقواس حول (*op) هي الجزء الحاسم.
- اسم الدالة كعنوان
- اسم الدالة بدون أقواس (مثل add) هو عنوانها — لذلك يعمل op = add;.
- callback (دالة الاستدعاء الراجع)
- دالة تُمرَّر كمؤشر إلى دالة أخرى، لتُستدعى في اللحظة المناسبة.
- دالة المقارنة الخاصة بـ qsort
- تستقبل qsort مؤشرًا إلى دالة مقارنة — وهكذا تستطيع ترتيب أي نوع.