ebooksgratis.com

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
מצביע – ויקיפדיה

מצביע

מתוך ויקיפדיה, האנציקלופדיה החופשית

ערך זה עוסק במושג בתכנות ובמדעי המחשב. אם התכוונתם לבעל זכות הצבעה, ראו בחירות.

במדעי המחשב, מצביע הוא טיפוס נתונים בשפת תכנות אשר ערכו מפורש ככתובת בזיכרון המחשב.

תוכן עניינים

[עריכה] מהו מצביע

לכל יחידת זיכרון מוקצית כתובת. לרוב כל מילה או בית בזיכרון המחשב מהווים יחידת זיכרון. המחשב מאפשר לנו לקבל ולשנות את הערך ביחידת זיכרון הנ"ל באמצעות המצביע. מצביעים הם טיפוסי נתונים המכילים כתובות.

מצביעים הם מאבני היסוד של שפות התכנות הקלאסיות. הם מאפשרים:

  1. להתייחס למידע המאוחסן בזיכרון המחשב באופן מופשט.
  2. העברת פרמטרים בין שגרות באופן חסכוני משום שלא נדרשת העתקה.
  3. הקצאה דינמית של זיכרון בזמן ריצה ועוד.

שימוש לא נכון במצביעים עלול לגרום לחריגות במהלך ריצת תוכנית המחשב. ניסיון גישה לכתובת לא חוקית יגרום לחריגת גישה. שורש הבעיה נעוץ בקלות בה ניתן לבצע מניפולציות על המצביעים, שהם ערכים מספריים לכל דבר.

[עריכה] מצביעי טיפוס

בשפות תכנות רבות ניתן להגביל מצביעים כך שיוכלו להצביע רק על טיפוסי נתונים מסוימים. לדוגמה, ניתן להגדיר מצביע לטיפוס int (מספרים שלמים).

[עריכה] מצביע לשגרה

ניתן להשתמש במצביעים על מנת להצביע על שגרה. יכולת זו מאפשרת להעביר שגרות כפרמטרים.

[עריכה] מצביע האפס

למצביע האפס יש ערך שמור (ע"פ רוב 0) המהווה אינדיקציה לכך שזוהי כתובת ריקה. מצביעי אפס הם בשימוש רב, על מנת לסמן מצבי קצה.

[עריכה] שימוש מושכל במצביעים

השימוש במצביעים הוא בעל פוטנציאל גבוה לבעיות בעיקר בגלל האפשרות לחריגת גישה. לעומת זאת, קשה לוותר על היתרונות שהשימוש בהם נותן. בשל כך הביאו שפות תכנות מתקדמות במדעי המחשב (כמו Java ו־C#) לשימוש בטיפוסים קצת יותר מוגבלים המאפשרים הצבעה על אובייקטים, אולם לא מאפשרים ביצוע מניפולציה מספרית על המצביע. כך למעשה מתבצעת הפרדה בין היכולת להצביע על אובייקטים, לבין היכולת לגשת לכתובות אקראיות בזיכרון.

בעיה נוספת הקשורה במצביעים ובהקצאת זיכרון דינאמית, היא דליפת זיכרון, הנובע מכך שבהליך מסוים זיכרון שהוקצה לצורך פעולה, לא שוחרר בתום הפעילות ונשאר תפוס. כאשר פעולה זו מתבצעת פעמים רבות זיכרון נתפס על ידי התוכנית לשווא, מכיוון שלא נעשה בו כל שימוש. גם כאן שפות תכנות מתקדמות ניסו לתת פתרונות הולמים, כגון "איסוף זבל" מובנה אוטומטי.

[עריכה] מחלקות לטיפול במצביעים

גישה נוספת היא ליצור מחלקה שתעטוף את הנושא של המצביעים ותאפשר לבצע פעילות שכזו, מבלי להיות חשוף לבעיות הכרוכות בהקצאה דינמית.

כך למשל ב-Visual Basic באמצעות מחלקת אוסף (Collection) ניתן להוסיף ולהסיר איברים באופן דינמי. האיברים יכולים להיות מכל סוגי המשתנים הקיימים, ויכולים להיות בו-זמנית שונים בגודלם ובסוגם, והגישה לאיברים היא באמצעות אינדקס כמו במערך. בדוט נט ישנה מחלקה מיוחדת (Marshal בשיתוף עם המשתנה IntPtr) שתפקידה לטפל בהקצאה דינמית מבלי לאפשר הקצאה דינמית ישירה. למחלקה זו יש אפשרויות רבות ומגוונות, וייחודה בכך שהיא מאפשרת הקצאה דינמית אך מצמצמת את הבעיות הכרוכות בכך.

[עריכה] ראו גם


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -