الدرس 23: التمرير بالقيمة مقابل التمرير بالمرجع (مقدمة)
تستخدم لغة C بشكل أساسي التمرير بالقيمة (Call by Value)، ولكن يمكننا محاكاة التمرير بالمرجع باستخدام المؤشرات (سيتم شرحها بالتفصيل لاحقاً).
1. التمرير بالقيمة (Call by Value)
عندما يتم تمرير متغير بالقيمة، تستقبل الدالة نسخة من قيمة المتغير. أي تعديلات تُجرى على المعلمة داخل الدالة لا تؤثر على المتغير الأصلي في الخارج.
c #include <stdio.h>
void modify_value(int x) { x = x * 2; // يغير نسخة 'a' printf("داخل الدالة: x = %d\n", x); }
int main() { int a = 10; modify_value(a); printf("خارج الدالة: a = %d\n", a); // a لا تزال 10 return 0; }
المخرجات:
داخل الدالة: x = 20 خارج الدالة: a = 10
2. الحاجة للتمرير بالمرجع (نظرة مسبقة)
ماذا لو كنا بحاجة لأن تقوم الدالة بتغيير قيمة متغير خارجي؟
تحقق لغة C ذلك عن طريق تمرير عنوان ذاكرة المتغير (مؤشر) بدلاً من قيمته. عندما تستلم الدالة العنوان، يمكنها البحث عن موقع البيانات الأصلي وتعديله.
c // سنستخدم المؤشرات (*) ومعامل العنوان (&) هنا void swap_numbers(int *ptr_a, int *ptr_b); // ... التنفيذ لاحقاً يستخدم المؤشرات لتعديل الذاكرة ...
هذه التقنية أساسية في لغة C وسيتم استكشافها بالكامل عند تغطية المؤشرات (الوحدة 6).