Menu
Coddy logo textTech

איברי מערך ומצביעים

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

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

התובנה המרכזית היא ש־array[i] שקול בדיוק ל־*(array + i). כשכותבים array + i, אומרים ל־C להתקדם i מיקומים מתחילת המערך. אופרטור ביטול ההפניה * מחזיר את הערך במיקום הזה.

int numbers[5] = {10, 20, 30, 40, 50};
// שתי השורות האלה עושות בדיוק את אותו הדבר:
printf("%d", numbers[2]);    // מדפיסה 30
printf("%d", *(numbers + 2)); // גם מדפיסה 30

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

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

challenge icon

אתגר

קל

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

  1. להכריז על מערך של מספרים שלמים בשם values עם 6 איברים ולאתחל אותו לערכים {5, 15, 25, 35, 45, 55}
  2. להשתמש בלולאת for כדי לעבור על כל איברי המערך
  3. בתוך הלולאה, להשתמש בסימון מצביעים *(values + i) כדי לגשת לכל איבר (לא להשתמש בסימון סוגריים מרובעים כמו values[i])
  4. להדפיס כל איבר באמצעות שיטת הגישה של סימון מצביעים
  5. לאחר הלולאה, להדגים את השקילות באמצעות הדפסת האיבר השלישי (אינדקס 2) בשתי השיטות:
    • ראשית, באמצעות סימון מצביעים: *(values + 2)
    • לאחר מכן, באמצעות סימון מערך מסורתי: values[2]

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

Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25

האתגר הזה בודק את ההבנה שלך בשקילות בין array[i] לבין *(array + i), ומדגים כיצד חשבון מצביעים מאפשר לך לגשת לאיברי מערך באמצעות חישובי כתובות זיכרון במקום אינדקסים מסורתיים.

נסו בעצמכם

#include <stdio.h>

int main() {
    // TODO: כתבו כאן את הקוד שלכם
    // הכריזו על המערך 'values' ואתחלו אותו עם 6 איברים
    // השתמשו בלולאת for כדי להדפיס כל איבר באמצעות סימון מצביעים *(values + i)
    // לאחר הלולאה, הדפיסו את האיבר השלישי גם באמצעות סימון מצביעים וגם באמצעות סימון מערך
    
    return 0;
}
quiz iconבחנו את עצמכם

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

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

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