גם אני רוצה../images/Emo70.gif
מערך הוא אוסף של תאי זכרון צמודים. לפיכך, בתנאי שיש לנו אוסף תאי זכרון כזה, אפשר לתאר מערך בצורה הבאה: [A[i הוא הכתובת בזכרון של תחילת המערך ועוד i*גודל תא בזכרון. מכיוון ש(לגמרי במקרה
) אם p הוא מצביע לתא בזכרון מסוג מסויים, אז: p+i היא בדיוק הכתובת של התא שנמצא i תאי זכרון מאותו הסוג אחריו. אמחיש באמצעות דוגמה: טיפוס התא הוא int בגודל 3 בתים. הכתובת עליה מצביע p היא 500 והיא בדיוק הכתובת בה מתחיל המערך A של תאים מסוג int. הכתובות מרווחות לפי בתים. לפיכך:
p+2 = 506 A[2] = *506 (506 כלומר, הערך שנמצא בתא)
כלומר, אין הבדל ממשי בין [A[2 לבין (p+2)*. ב-C
אין הבדל כלל בין:[A[2 לבין (A + 2)*. יתר על כן, [a[b בתורגם בדיוק להיות:
*(a+b)
ולכן כל הביטויים הבאים שקולים:
a == *(a + i) == *(i + a) == i[a]
כעת ראינו שמצביעים ומערכים ממש ממש דומים. גם המימוש שלהם דומה מאוד. למעשה, מערך ממומש על ידי מצביע שאי אפשר לשנות את תכנו. הוא תמיד תמיד מצביע לכתובת של התא הראשון במערך. במימוש שלך של C גם ראית שהמהדר אפילו לא טורח להקצות לו מקום מיוחד בזכרון, שכן באמת שאין צורך שהרי כל מה שהוא צריך לזכור הוא במילא כתובת בזכרון. מקווה שזה נשמע הגיוני משהו, אהד.