English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دروس أساسية في C

تحكم في عملية C

الوظائف في لغة C

المسافات في لغة C

المراجع في لغة C

الصفوف في لغة C

مباني C

ملفات C

C أخرى

دليل مرجع C

المراجع والوظائف في لغة C

في هذا الدليل، ستتعلم كيفية نقل العناوين كمعلمات إلى الدوال باستخدام الأمثلة. هذه التقنية تُسمى "إشارة النداء".

يمكن أيضًا نقل العناوين كمعلمات إلى الدوال في برمجة C.

لإجراء هذه العناوين في تعريف الدالة، يمكننا استخدام المراجع. لأن المراجع تستخدم لتخزين العناوين. دعونا نأخذ مثالاً:

مثال: إجراء نداء بالإشارة

#include <stdio.h>
void swap(int* n1, int* n2);
int main()
{
    int num1 = 5, num2 = 10;
    // يتم نقل عناوين num1 و num2
    swap( &num1, &num2);
    printf("num1 = %d\n", num1);
    printf("num2 = %d", num2);
    return 0;
}
void swap(int* n1, int* n2)
{
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

عند تشغيل هذا البرنامج، الناتج يكون:

num1 = 10
num2 = 5

استخدم swap(&num1، &num2) لنقل عناوين num1 و num2 إلى دالة swap().

تقبل المراجع n1 و n2 هذه المعلمات في تعريف الدالة.

void swap(int* n1, int* n2) {
    ... ..
}

عندما تتغير *n1 و *n2 في دالة swap()، تتغير num1 و num2 في دالة main().

في داخل دالة swap()، يتم تبادل *n1 و *n2. لذلك، يتم تبادل num1 و num2.

لاحظ، لا يعود أي شيء من swap(). نوع العودة هو void.

هذه الطريقة في برمجة C تُسمى "إشارة النداء".

مثال 2: نقل المرجع إلى الدالة

#include <stdio.h>
void addOne(int* ptr) {
  (*ptr)++; // في *ptr زيادة 1
}
int main()
{
  int* p, i = 10;
  p = &i;
  addOne(p);
  printf("%d", *p); // 11
  return 0;
}

هنا، القيمة المخزنة في *p هي 10 في البداية.

ثم نرسل المرجع p إلى وظيفة addOne(). يحصل ptr في وظيفة addOne() على هذا العنوان.

في الداخلية للوظيفة، نستخدم (*ptr)++; لزيادة القيمة المخزنة في ptr بنقطة. لأن ptr و p يشيران إلى نفس العنوان، لذا *p في main() هو 11.