שיעור 19: אריתמטיקה של מצביעים ומערכים
למצביעים אפשר לעשות חשבון — אבל חשבון חכם: p + 1 לא מקדם בבית אחד, אלא באיבר שלם אחד, כלומר ב-sizeof(type) בתים. כאן מתגלה הסוד הגדול של מערכים: שם המערך 'דועך' (decays) לכתובת האיבר הראשון — arr זה בדיוק &arr[0]. מכאן נובעת הזהות המפורסמת: *(arr + i) הוא בדיוק arr[i] — הסוגריים המרובעים
מערך הוא שורת ארגזים צמודים ברחוב. שם המערך הוא הכתובת של הארגז הראשון, ו-p + 1 הוא 'קפוץ לארגז הבא' — לא משנה כמה סנטימטרים רחב כל ארגז, הקפיצה תמיד מדויקת לארגז שלם.
- אריתמטיקת מצביעים
- חיבור וחיסור על מצביעים. p + 1 מתקדם לאיבר הבא, לא לבית הבא.
- צעד של איבר
- p + 1 מוסיף sizeof(type) בתים לכתובת — עבור int (4 בתים): מ-1000 ל-1004.
- דעיכת מערך
- ברוב הביטויים, שם מערך הופך לכתובת האיבר הראשון: arr == &arr[0].
- הזהות arr[i] == *(arr + i)
- אינדוקס הוא קיצור לאריתמטיקה: לקפוץ i איברים מהתחלה ולגשת לערך.
- סריקה עם מצביע
- לולאה שמקדמת מצביע על פני המערך: while (p < arr + n) { ...; p++; }.