בעיה ידועה ומוכרת
את לא הראשונה וגם לא האחרונה שנתקלת בה הנה הסבר קצר ומאוד כללי על פוינטרים : למחשב יש 2 סוגי "כתובות" - הכתובת ה"פיזית" - כלומר כתובת אמיתית של זכרון שבה ניתן לאחסן מידע , והכתובת ה"לוגית" - שזו כתובת שהיא לא קיימת באמת ולא ניתן לאחסן בה זכרון מרחב הכתובות הלוגיות גדול בהרבה ממרחב הכתובות הפיזיות מסיבות שונות שזה לא המקום לפרט אותן המחשב עצמו משתמש בכתובות הפיזיות אבל מערכת ההפעלה "מספקת" למשתמש\מתכנת כתובות פיזיות - וזה כדי לשמור על המחשב מפני פגיעה של מתכנתים בזיכרון ובמידע לכל כתובת לוגית שמוקצאת כמו שצריך "מוצמדת" מאחוריה כתובת פיזית - שבה למעשה מוחזק המידע בפועל הפוינטר הוא למעשה משתנה שמכיל מספר שמייצג כתובת לוגית - ככה שניתן "לקדם" אותו וא "להפחית" אותו וע"י כך לשנות את תאי הזיכרון אליהם אנו מתיחסים השימוש בפוינטרים נועד למ"ס רב של מטרות: * כדי להעביר לפונקציה משתנה ע"מ לבצע בו שינויים את חייבת להעביר פוינטר ולא מספיק העברה של משתנה רגיל מבחינת המערכת משתנה רגיל שמועבר הוא לא לשינוי ולכן היא יוצרת משתנה חדש מאותו הסוג ומעתיקה אותו אליו - וזה מכביד על המערכת גם מבחינת הזיכרון וגם מבחינת זמן ריצה - וגם מונע שינויים * כאשר את עובדת עם מערכים - ומגדירה משתנה אינדקס - המערכת מתרגמת כל גישה למערך כך : "גש לתא הראשון ואז תלך ממנו X תאים" - כלומר - את גם מגדירה משתנה לשוא וזה מכביד על הזיכרון ועל המהירות, וגם מכבידה על המהירות ושום שבכל פעם שאת רוצה לגשת לתא מסויים המערכת ניגשת לתא הראשון ואז הולכת לתא הנוכחי כל זה - משום שהמערכת בעצמה עובדת עם כתובות ולא עם אינדקסים - וע"י השימוש בפוינטרים את מאפשרת עבודה מהירה יותר ויותר אפשרויות לתכנית כמובן שישנן סיבות נוספות לפוינטרים - וזה ממש לא המקום למנות אותם - אבל הרעיון העיקרי הוא לאפשר למתכנת גישה לרובד יותר קרוב למערכת כדי לשפר את הביצועים של התכנית ולפתוח אפשרויות נוספות כמובן שזה פותח פתח (או יותר נכון שער ענק) לטעויות , אבל זו השפה - לטוב ולרע... אני אשמח לענות על שאלות נוספות