20-01-2007, 08:00
|
|
|
חבר מתאריך: 31.03.02
הודעות: 400
|
|
אפשרי בהחלט
למרות שזה עלול לבלבל אותך קצת, אבל אין כמעט הבדל בין משתנה רגיל למצביע מבחינה מהותית
כיוון שמצביע זה פשוט משתנה אשר ערכו היא כתובת.
ניתן בהחלט לעשות משהו כמו:
קוד:
int* p;
p = 0xFFFFFFFF;
אם, לעומת זאת, ברצונך לגשת לערך שעליו מצביע p, או במילים אחרות להגיע לתוכן הזיכרון אשר
נמצא בכתובת FFFFFFFF, אתה שם כוכבית בהתחלה:
חשוב אבל גם להוסיף ולהגיד שבדוגמא שלי הכרזתי על p כמצביע לסוג int, ז"א שהמהדר מניח שאתה
עובד עם מספרים שלימים שבד"כ מורכבים מ4 ביתים. לכן אם תעשה משהו כמו p++, הכתובת של
המצביע אוטומטית תגדל ב4 ולא ב1, כיוון שהמהדר בעצם משנה את p כדי להצביע לשלם הבא בזיכרון.
יש עוד דבר אחד שלגביו אני לא בטוח כי אף פעם לא ניסיתי אותו. בהרבה מערכות מחשבים
הזיכרון "מיושר", ז"א שכאשר אתה ניגש לנתון שהוא יותר גדול מבית אחד (כגון מספר שלם),
כתובת הזיכרון חייבת להתחלק במספר כלשהו. אם הזיכרון מיושר באופן מלא אז הכתובת חייבת
להתחלק בגודל של הנתון (4 למספרים שלימים). אם הוא מיושר חלקית, אז יכול להיות שניתן
לגשת לזיכרון שמתחלק ב2 אפילו אם הנתון בן 4 ביתים. לכן, יכול להיות שמצביע למספר שלם
לא יוכל לקבל כל כתובת. אבל בעיקר אני יודע את זה מתיכנות בשפת מכונה, אני לא בטוח איך
המהדר של C מטפל בדברים כאלה.
עקרונית, אבל, זה לא רעיון טוב לתת למצביע כתובת באופן מפורש, ואת זה גם בד"כ לא עושים.
לפעמים, אבל, משתמשים בעקרון הזה כדי לכתוב למקום מסויים בזיכרון כאשר כותבים תוכנה
ברמה נמוכה מאוד למשל בכתיבת מערכות הפעלה.
|