שיעור 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. הפונקציה כותבת דרך המצביע ומשנה את המשתנה האמיתי.
- פרמטר פלט
- מצביע שהפונקציה כותבת דרכו תוצאה החוצה — כך 'מחזירים' יותר מערך אחד.
- מצביע ל-struct
- מצביע שמחזיק כתובת של מבנה: struct Student *s = &st;.
- אופרטור החץ ->
- s->grade הוא קיצור ל-(*s).grade: גש למבנה שבכתובת וקח את השדה.