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

تعديل المتغيرات عبر المؤشرات

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

الآن يمكنك تسخير القوة الحقيقية للمؤشرات: تعديل المتغير الأصلي من خلال دالة. عندما تقوم بتمرير مؤشر إلى دالة، يمكن للدالة استخدام عامل إلغاء المرجعية (dereference operator) لتغيير القيمة المخزنة في عنوان الذاكرة هذا.

داخل الدالة، تقوم بإلغاء إسناد المؤشر باستخدام المعامل * للوصول إلى قيمة المتغير الأصلي وتعديلها. تُسمى هذه التقنية التمرير بالمرجع (pass-by-reference) لأنك تقوم بتمرير مرجع لموقع المتغير في الذاكرة.

void doubleValue(int *ptr) {
    *ptr = *ptr * 2;  // إلغاء المرجعية لتعديل القيمة الأصلية
}

int main() {
    int x = 5;
    doubleValue(&x);  // تمرير عنوان x
    // x الآن هي 10!
    return 0;
}

المفتاح هو استخدام *ptr على الجانب الأيسر من عملية التعيين لتعديل القيمة الموجودة في عنوان الذاكرة الذي يحمله المؤشر. يسمح هذا للدوال بتغيير المتغيرات بشكل دائم من الدالة المستدعية، مما يفتح إمكانيات برمجية قوية لا يمكن تحقيقها ببساطة من خلال التمرير بالقيمة (pass-by-value).

challenge icon

التحدي

سهل

اكتب برنامجًا بلغة C يوضح تعديل المتغيرات من خلال المؤشرات عن طريق إنشاء دالة تضاعف قيمة عدد صحيح ثلاث مرات.

يجب أن يقوم برنامجك بما يلي:

  1. إنشاء دالة باسم tripleValue تأخذ مؤشرًا لعدد صحيح كمعامل لها
  2. داخل دالة tripleValue، استخدم عامل إلغاء المرجعية (dereference operator) لضرب القيمة الموجودة في عنوان الذاكرة في 3
  3. داخل دالة tripleValue، اطبع القيمة الجديدة بالتنسيق التالي: Value tripled to: [value]
  4. في دالة main، قم بالتصريح عن متغير عدد صحيح باسم number وقم بتهيئته بالقيمة 8
  5. اطبع القيمة الأصلية بالتنسيق التالي: Original value: [value]
  6. استدعِ دالة tripleValue ومرر عنوان المتغير number باستخدام عامل العنوان (address-of operator)
  7. بعد استدعاء الدالة، اطبع القيمة النهائية لـ number بالتنسيق التالي: Final value: [value]

يجب أن يوضح مخرج البرنامج أن الدالة نجحت في تعديل المتغير الأصلي من خلال المؤشر:

Original value: 8
Value tripled to: 24
Final value: 24

يوضح هذا التحدي قوة التمرير بالمرجع (pass-by-reference) باستخدام المؤشرات، حيث يمكن للدالة تعديل المتغير الأصلي بشكل دائم عن طريق إلغاء مرجعية المؤشر وتغيير القيمة في ذلك الموقع من الذاكرة.

جرّب بنفسك

#include <stdio.h>

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

int main() {
    // TODO: اكتب الكود الخاص بك هنا
    // قم بتعريف وتهيئة المتغير number
    // اطبع القيمة الأصلية
    // استدعِ دالة tripleValue
    // اطبع القيمة النهائية
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow