ההבדל בין המצביע לבין מערך

Anonim

Pointer לעומת מערך

מצביע הוא סוג נתונים שמכיל הפניה למיקום זיכרון (כלומר, משתנה מצביע מאחסן כתובת של מיקום זיכרון שבו מאוחסנים נתונים מסוימים.) מערכים הם מבנה הנתונים הנפוץ ביותר לאחסון אוסף של רכיבים.רוב שפות התכנות מספקות שיטות להכרזה קלה על מערכים ואלמנטים גישה במערכים. <- - 1 ->

מהו מצביע?

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

-> ->

מה זה מערך?

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

ערכי int [5];

ערכים [0] = 100;

ערכים [1] = 101;

ערכים [2] = 102;

ערכים [3] = 103;

ערכים [4] = 104;

איור 1: קוד להצהרה והקצאת ערכים למערך

100

101 102 103 104 אינדקס: 0
1 2 < 3 4 איור 2: מערך המאוחסן בזיכרון מעל קוד מגדיר מערך שיכול לאחסן 5 מספרים שלמים והם נגישים באמצעות מדדים 0 עד 4. מאפיין חשוב אחד של מערך הוא, המערך כולו מוקצה כגוש בודד של זיכרון וכל רכיב מקבל מרחב משלה במערך. לאחר הגדרת מערך, גודלו קבוע. אז אם אתה לא בטוח לגבי גודל המערך בזמן קומפיל, היית צריך להגדיר מערך מספיק גדול כדי להיות בצד הבטוח. אבל, רוב הפעמים, אנחנו באמת הולכים להשתמש בפחות מספר אלמנטים מאשר הקצו. אז כמות ניכרת של זיכרון מבוזבז למעשה. מצד שני, אם "מערך מספיק גדול" הוא לא מספיק גדול מספיק, התוכנית היתה לקרוס.

מה ההבדל בין מצביעים ומערכים?

מצביע הוא סוג נתונים המאחסן כתובת של מיקום זיכרון שבו מאוחסנים נתונים מסוימים, ואילו מערכים הם מבנה הנתונים הנפוץ ביותר לאחסון אוסף של אלמנטים. בשפת התכנות C, אינדקס המערך נעשה באמצעות אריתמטית המצביע (i.) אלמנט ה- ith של המערך x יהיה שווה ל * (x + i)).לכן ב C, קבוצה של מצביעים המציינים קבוצה של מיקומי זיכרון כי הם רצופים, ניתן לחשוב על מערך. יתר על כן, יש הבדל באופן שבו מפעיל הגודל פועל על מצביעים ומערכים. כאשר מוחל על מערך, גודל מפעיל יחזיר את כל הגודל של המערך, ואילו כאשר מוחל על מצביע, זה יחזור רק את גודל המצביע.