الدرس 20: التمرير بالعنوان — swap يعمل فعلاً
تتذكر الـ swap المعطوبة من الدرس 10؟ استقبلت الدالة نسخاً من x و y، وبدّلت النسخ — وبقيت القيم الأصلية كما هي. اليوم نصلحها: void swap(int *a, int *b) تستقبل عناوين، ونستدعيها بـ swap(&x, &y);. الكتابة عبر *a و *b تغيّر متغيرات المستدعي الحقيقية. هكذا أيضاً 'تُرجِع' الدوال عدة قيم عبر معاملات الإخرا
أن تطلب من عامل صيانة أن يصلح صورة لغرفة معيشتك لن يفيد: سيصلح الصورة. استقبلت swap في الدرس 10 'صوراً' (نسخاً). حين تسلّمه العنوان والمفتاح (&x)، يدخل ويغيّر غرفة المعيشة الحقيقية.
- التمرير بالقيمة
- الوضع الافتراضي في C: تستقبل الدالة نسخة. تغيير النسخة لا يمسّ الأصل — ولهذا فشلت swap في الدرس 10.
- التمرير بالعنوان
- مرّر &x بدلاً من x. تكتب الدالة عبر المؤشر فتغيّر المتغير الحقيقي.
- معامل الإخراج (out-parameter)
- مؤشر تكتب الدالة عبره نتيجة إلى الخارج — هكذا 'تُرجِع' أكثر من قيمة واحدة.
- مؤشر إلى struct
- مؤشر يحمل عنوان بنية: struct Student *s = &st;.
- مؤثر السهم ->
- s->grade اختصار لـ (*s).grade: اذهب إلى البنية الموجودة في العنوان وخذ الحقل.