ההבדל בין המצביע לבין הפניה | פוינטר נגד הפניה

Anonim

הפרש מפתח - פוינטר לעומת הפניה

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

-> ->

מהו מצביע?

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

בתחביר C + +;

int i = 5;

int * ptr = & i;

השורה הראשונה מגדירה משתנה מאותחל עם ערך של 5. הקו השני מגדיר מצביע לכתובת הזיכרון של המשתנה. הנה, "ptr" הוא הכריז כמו אובייקט של סוג 'המצביע אל int' שערכו ההתחלתי הוא הכתובת של אובייקט i. בעיקרון ptr משתנה נקודות i על ידי אחסון כתובת הזיכרון שלה.

-> ->

קבלת הערך המאוחסן במיקום זיכרון נקרא dereferencing . האופרטור * משמש כדי לבטל את המצביע. לאחר ההצהרות נעשה, הביטוי העקיף * ptr dereferences ptr להתייחס i.

כדי לשנות את הערך של i, ניתן להשתמש במשימה הבאה;

* ptr = 20;

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

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

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

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

מצביעים נתמכים בשפות כגון C, C + +, פסקל ושפות הרכבה רבות.

מצביע מצביע על כתובת הזיכרון המשויכת למשתנה b.

מהי הפניה?

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

בתחביר C + +;

int i = 5;

int & ref = i;

השורה הראשונה מגדירה משתנה מאותחל עם ערך של 5. השורה השנייה מכריזה 'ref' כאובייקט מסוג 'הפניה אל int' המתייחס ל- i. התייחסות שונה מהנתונים עצמם בהתחשב בכך שהפניה מיושמת ככתובת הפיזית של הנתון המסוים המאוחסן בזיכרון.

לאחר ההגדרה, לא ניתן להקצות ערך מחדש לערך חדש. אזכור מתייחס תמיד לאובייקט שאליו הוא מאותחל. במשימה הבאה, ref עדיין מתייחס ל- i, אבל הערך הוא כעת 20.

ref = 20;

על פי הדוגמה לעיל, dereferencing הפניות אינו דורש כל המפעילים.

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

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

שפות תכנות כגון C + +, Java, Python, Perl, PHP, Ruby וכו '.

מה ההבדל בין Pointer ו- Reference?

הגדרת המצביע והפניה

מצביע: מצביע הוא כתובת הזיכרון של אובייקט המאוחסן בזיכרון המחשוב.

הפניה: הפניה היא מזהה חלופי או כינוי עבור אובייקט.

מאפייני המצביע והפניה

הצהרה

מצביע: מצביע על מצביע עם האופרטור *.

הפניה: מוצגת הפניה עם האופרטור.

Dereferencing

מצביע: משתנה מצביע מחייב הפעלה של האופרטור *.

הפניה: משתנה התייחסות אינו דורש ביטול של מפעיל כלשהו.

אתחול

מצביע: ניתן לאתחל את המצביעים ל- null.משתנים כאלה נקראים מצביעים null.

הפניה: לא ניתן לאתחל את הפניות ל- null. אין דבר כזה הפניה null. התייחסות חייבת תמיד להתייחס לאובייקט.

הקצאות מחדש

מצביע: ניתן לשנות את מצביע המצביע כדי להתייחס לאובייקטים שונים.

הפניה: לא ניתן להקצות מחדש את משתנה הייחוס. זה תמיד מתייחס לאובייקט שבו הוא אותחל.

שימוש

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

הפניה: יש להשתמש במשתני ייחוס כאשר תמיד יהיה אובייקט להתייחס אליו וכאשר הוא אינו נדרש להשתמש במשתנה הייחוס הזה כדי להתייחס לכל דבר אחר פרט לאובייקט.

יישום השימוש

מצביע: ניתן להשתמש במשתני מצביע ליישום אלגוריתמים ומבני נתונים.

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

שפות משומשות:

מצביע: שפות תכנות כגון C, C + +, פסקל ושפות תמיכה רבות.

הפניה: שפות תכנות כגון C + +, Java, Python, Perl, PHP, Ruby, וכו '.

Image Courtesy: "Pointers" על ידי קובץ זה נוצר על ידי המשתמש: SvenTranslation. עבודתי שלי. תמונה וקטורית זו נוצרה עם Inkscape. (CC BY-SA 3. 0) via Commons -