Menu
Coddy logo textTech

שמות מערכים כמצביעים

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 7 מתוך 63.

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

המשמעות היא שכאשר יש לך מערך כמו int numbers[5];, השם numbers הוא למעשה מצביע שתמיד מצביע אל numbers[0]. אפשר לחשוב על שם המערך כעל מצביע מובנה שאין צורך להצהיר עליו בנפרד.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' מצביע על האיבר הראשון
// numbers == &numbers[0]  // אלה שקולים!

השקילות הזו חיונית: numbers ו־&numbers[0] נותנים לך את אותה כתובת זיכרון בדיוק. שם המערך הוא פשוט דרך נוחה יותר להתייחס לכתובת של האיבר הראשון, בלי להשתמש באופרטור לקיחת הכתובת.

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

challenge icon

אתגר

קל

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

  1. להצהיר על מערך מספרים שלמים בשם numbers ובו 4 איברים, ולאתחל אותו בערכים {10, 20, 30, 40}
  2. להצהיר על מצביע למספר שלם בשם ptr
  3. להש assign את שם המערך numbers למצביע ptr
  4. להדפיס את הכתובת המאוחסנת ב-numbers באמצעות printf עם מציין הפורמט %p
  5. להדפיס את הכתובת של האיבר הראשון &numbers[0] באמצעות printf עם מציין הפורמט %p
  6. להדפיס את הכתובת המאוחסנת ב-ptr באמצעות printf עם מציין הפורמט %p
  7. להדפיס את הערך של האיבר הראשון באמצעות שם המערך: *numbers
  8. להדפיס את הערך של האיבר הראשון באמצעות המצביע: *ptr

הפלט שלכם צריך להציג את התוצאות בפורמט הבא:

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

האתגר הזה מדגים ששם המערך מתפקד כמצביע קבוע לאיבר הראשון, וש-numbers, &numbers[0] ו-ptr מכילים כולם את אותה כתובת זיכרון כאשר ptr מקבל את שם המערך.

נסו בעצמכם

#include <stdio.h>

int main() {
    // TODO: כתבו כאן את הקוד שלכם
    // 1. הכריזו על המערך 'numbers' ואתחלו אותו עם {10, 20, 30, 40}
    // 2. הכריזו על מצביע למספר שלם בשם 'ptr'
    // 3. הציבו במצביע את שם המערך
    // 4. הדפיסו את כל הכתובות והערכים הנדרשים
    
    return 0;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C אונליין