מצביע (באנגלית: Pointer) הוא טיפוס נתונים שערכו הוא כתובת בזיכרון המחשב. כתובת היא המיקום שבו שמורים נתונים בזיכרון.
המחשב מחלק את הזיכרון ליחידות עם כתובת לכל יחידה. המצביע מאפשר לגשת ליחידה על־ידי ציון הכתובת שלה, ולא על־ידי העתקת התוכן. זה יעיל במיוחד כשמעבירים פרמטרים לשגרות (פונקציות), כי מעבירים כתובת במקום להעתיק נתונים גדולים. מצביעים גם מאפשרים הקצאה דינאמית של זיכרון בזמן ריצה, ויצירת מבני נתונים משתנים.
בשפות רבות מצביעים מוגבלים לטיפוס מסוים, למשל מצביע ל-int (מספר שלם). זאת כדי להבהיר איך יש לפרש את הנתונים שעליהם מצביעים.
ניתן להצביע על שגרה, כלומר לשמור כתובת של פונקציה ולקרוא לה דרך המצבע. זה מאפשר להעביר שגרות כפרמטרים.
מצביע האפס (לרוב הערך 0) מסמן כתובת ריקה. משתמשים בו למקרים מיוחדים, כמו לציין שאין הקצאה דינאמית או קצה מבנה נתונים.
שימוש לא נכון במצביעים עלול לגרום לשגיאות ריצה מסוג חריגת גישה, כשמנסים לגשת לכתובת לא חוקית. בעיה נוספת היא דליפת זיכרון: זיכרון שהוקצה ולא שוחרר נשאר תפוס.
שפות מודרניות כמו Java ו־C# הגבילו את היכולת לבצע מניפולציה מספרית על מצביעים. הן מאפשרות הצבעה על אובייקטים אבל מונעות גישה ישירה לכתובות אקראיות. כך מצמצמים את הסיכונים.
בנוסף יש פתרונות של עטיפה: מחלקות שמנהלות הקצאה דינמית במקום המפתח. לדוגמה, Visual Basic משתמש במחלקת Collection לניהול איברים דינמי, וב־.NET יש כלים כמו Marshal עם IntPtr לטיפול בהקצאות מבלי לאפשר הקצאה גולמית ישירה.
מצביע הוא סוג של משתנה. הערך שלו הוא כתובת בזיכרון. כתובת היא המקום שבו מחשב שומר מידע.
באמצעות מצביע אפשר לומר למחשב היכן נמצא הנתון, ולא להעתיק אותו. זה חוסך זמן וזיכרון.
יש מצביעים שמיועדים לסוג אחד של נתונים, למשל מספרים שלמים. יש גם מצביעים שמצביעים על פונקציות. יש מצביע מיוחד שנקרא מצביע אפס. ערכו בדרך כלל 0. הוא אומר "אין כתובת".
אם משתמשים במצביעים בצורה לא נכונה, התוכנית עלולה להיתקל בשגיאה כי הכתובת לא חוקית. גם יכול לקרות מצב שבו זיכרון נשאר תפוס כי לא שחררו אותו. שפות מודרניות עוזרות בכך: הן משתמשות בהפניות בטוחות ולא נותנות לשנות כתובות ישירות. יש גם תוכניות שמנקות זיכרון אוטומטית, כדי להימנע מבעיות.
תגובות גולשים