الدرس 32: تمرير المصفوفات إلى الدوال
عند تمرير اسم مصفوفة إلى دالة، تستخدم لغة C فعلياً التمرير بالمرجع (أو بدقة أكبر، التمرير عبر مؤشر).
ما الذي يتم تمريره؟
عندما تمرر اسم مصفوفة (مثل my_array)، تعامله لغة C كمؤشر لعنصرها الأول. تستلم الدالة عنوان الذاكرة لبداية المصفوفة.
بما أن الدالة تستلم العنوان، فإن أي تغييرات تُجرى على عناصر المصفوفة داخل الدالة ستؤثر على المصفوفة الأصلية في الخارج.
قاعدة تعريف الدالة
عند التصريح عن المعلمة، يجب تحديد النوع، لكن الحجم اختياري (وغالباً ما يُحذف).
c // النماذج الثلاثة أدناه متكافئة عند استخدامها كمعلمات: void print_array(int arr[], int size); void print_array(int arr[10], int size); // يتجاهل المترجم الحجم هنا void print_array(int *arr, int size); // الطريقة الأكثر وضوحاً لإظهار أنه مؤشر
مثال: تعديل مصفوفة
c #include <stdio.h>
void double_elements(int arr[], int n) { for (int i = 0; i < n; i++) { arr[i] *= 2; // يتم تعديل المصفوفة الأصلية } }
int main() { int data[3] = {1, 2, 3};
// تمرير اسم المصفوفة (العنوان) والحجم
double_elements(data, 3);
printf("البيانات الجديدة: %d, %d, %d\n", data[0], data[1], data[2]);
// المخرجات: 2, 4, 6
return 0;
}
نقطة حاسمة: بما أن الدالة تفقد معرفة حجم المصفوفة عندما تستلم المؤشر، يجب عليك دائماً تقريباً تمرير الحجم كوسيط صحيح منفصل.