English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدليل، ستتعلم كيفية نقل العناوين كمعلمات إلى الدوال باستخدام الأمثلة. هذه التقنية تُسمى "إشارة النداء".
يمكن أيضًا نقل العناوين كمعلمات إلى الدوال في برمجة 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 تُسمى "إشارة النداء".
#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.