איברי מערך ומצביעים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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.
אתגר
קלכתוב תוכנית C שמדגימה גישה לאיברי מערך באמצעות סימון מצביעים במקום שימוש באינדקסים המסורתיים של מערך. התוכנית שלך צריכה:
- להכריז על מערך של מספרים שלמים בשם
valuesעם 6 איברים ולאתחל אותו לערכים {5, 15, 25, 35, 45, 55} - להשתמש בלולאת for כדי לעבור על כל איברי המערך
- בתוך הלולאה, להשתמש בסימון מצביעים
*(values + i)כדי לגשת לכל איבר (לא להשתמש בסימון סוגריים מרובעים כמוvalues[i]) - להדפיס כל איבר באמצעות שיטת הגישה של סימון מצביעים
- לאחר הלולאה, להדגים את השקילות באמצעות הדפסת האיבר השלישי (אינדקס 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;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין