العودة إلى الدورة

المؤشرات الجزء 4: المؤشرات والدوال

لغة C: من الصفر إلى الاحتراف - الدليل الشامل للمبتدئين

الدرس 37: المؤشرات الجزء 4: المؤشرات والدوال

يتيح استخدام المؤشرات في الدوال إمكانية تنفيذ التمرير بالمرجع (Call by Reference) وتمرير هياكل بيانات معقدة بكفاءة.

1. تحقيق التمرير بالمرجع (دالة التبديل - Swap)

للسماح لدالة بتعديل متغيرات تم التصريح عنها خارج نطاقها، نمرر عناوين تلك المتغيرات.

c #include <stdio.h>

void swap(int *x, int *y) { int temp = *x; // تخزين القيمة التي يشير إليها x *x = *y; // تغيير القيمة في العنوان x إلى القيمة في العنوان y *y = temp; // تغيير القيمة في العنوان y إلى قيمة x الأصلية }

int main() { int a = 5, b = 10; printf("قبل التبديل: a=%d, b=%d\n", a, b);

// تمرير العناوين
swap(&a, &b);

printf("بعد التبديل: a=%d, b=%d\n", a, b); 
return 0;

}

2. إرجاع مؤشرات من الدوال

يمكن للدوال أن تعيد مؤشراً (عنواناً).

تحذير: لا تقم أبداً بإرجاع عنوان متغير محلي (تلقائي)، حيث يتم إلغاء تخصيص تلك الذاكرة عند خروج الدالة، مما يؤدي إلى "مؤشر معلق" (dangling pointer).

إذا كان يجب عليك إرجاع مؤشر، فيجب أن يشير إلى:

  1. متغير عالمي (global).
  2. متغير محلي ثابت (static local).
  3. ذاكرة مخصصة ديناميكياً (سيتم تغطيتها لاحقاً).
  4. ذاكرة تم تمريرها إلى الدالة كوسيط.