Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

تمرير المؤشرات إلى الدوال

جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 26 من 63.

الآن بعد أن فهمت قيود التمرير بالقيمة (pass-by-value)، دعنا نستكشف كيف يحل تمرير المؤشرات إلى الدوال (passing pointers to functions) هذه المشكلة. فبدلاً من تمرير نسخة من قيمة المتغير، يمكنك تمرير عنوان الذاكرة الخاص بالمتغير إلى الدالة.

عندما تقوم بتمرير مؤشر (pointer) إلى دالة (function)، تتلقى الدالة وصولاً إلى موقع المتغير الأصلي في الذاكرة. وهذا يعني أن الدالة يمكنها العمل مباشرة مع البيانات الأصلية، وليس مجرد نسخة منها.

void processValue(int *ptr) {
    // ptr يحمل عنوان المتغير الأصلي
    // يمكن للدالة الآن الوصول إلى موقع الذاكرة هذا
}

int main() {
    int x = 10;
    processValue(&x);  // تمرير عنوان x
    return 0;
}

لاحظ كيف نستخدم عامل العنوان & عند استدعاء الدالة لتمرير عنوان المتغير. يتم التصريح عن معامل الدالة كـ int *ptr، مما يشير إلى أنه يتوقع استقبال مؤشر إلى عدد صحيح. تفتح هذه التقنية الأساسية إمكانيات قوية للدوال للتفاعل مع بيانات برنامجك.

challenge icon

التحدي

سهل

اكتب برنامجاً بلغة C يوضح كيفية تمرير المؤشرات (pointers) إلى الدوال. يجب أن يقوم برنامجك بما يلي:

  1. إنشاء دالة باسم displayValue تأخذ مؤشراً إلى عدد صحيح (integer) كمعامل لها
  2. داخل دالة displayValue، استخدم عامل إلغاء المرجعية (dereference operator) للوصول إلى القيمة الموجودة في عنوان الذاكرة وطباعتها بالتنسيق التالي: Value at address: [value]
  3. في الدالة main، قم بالتصريح عن متغير صحيح باسم number وقم بتهيئته بالقيمة 42
  4. اطبع القيمة الأصلية بالتنسيق التالي: Original value: [value]
  5. استدعِ دالة displayValue ومرر عنوان المتغير number باستخدام عامل العنوان (address-of operator)
  6. بعد استدعاء الدالة، اطبع رسالة تأكيد: Function call completed

يجب أن يوضح مخرج برنامجك أن الدالة استقبلت ووصلت بنجاح إلى عنوان الذاكرة للمتغير الأصلي:

Original value: 42
Value at address: 42
Function call completed

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

ورقة مرجعية

عند تمرير المؤشرات (pointers) إلى الدوال، تحصل الدالة على وصول إلى موقع الذاكرة الخاص بالمتغير الأصلي بدلاً من نسخة من قيمته.

استخدم عامل العنوان (address-of operator) & لتمرير عنوان متغير إلى دالة:

void processValue(int *ptr) {
    // يحمل ptr عنوان المتغير الأصلي
    // يمكن للدالة الآن الوصول إلى موقع الذاكرة هذا
}

int main() {
    int x = 10;
    processValue(&x);  // تمرير عنوان x
    return 0;
}

يتم التصريح عن معامل الدالة كـ int *ptr للإشارة إلى أنها تتوقع استقبال مؤشر إلى عدد صحيح (integer).

جرّب بنفسك

#include <stdio.h>

// TODO: اكتب دالة displayValue الخاصة بك هنا

int main() {
    // TODO: اكتب الكود الخاص بك هنا
    // 1. التصريح عن متغير number وتهيئته
    // 2. طباعة القيمة الأصلية
    // 3. استدعاء دالة displayValue
    // 4. طباعة رسالة الإتمام
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow