מצביעים ומערכים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 5 מתוך 56.
למערכים ולמצביעים יש קשר מיוחד ב-C++. כשאתה מצהיר על מערך, שם המערך משמש למעשה כמצביע לאיבר הראשון במערך. הקשר הזה מאפשר לך להשתמש במצביעים כדי לעבוד עם מערכים בדרכים רבות עוצמה.
התבוננו בהצהרת המערך הזאת:
int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers; // ptr מצביע כעת על numbers[0]כאן, numbers שקול ל־&numbers[0] — שניהם נותנים לך את הכתובת של האיבר הראשון. המצביע ptr מצביע כעת לאותו מיקום.
ברגע שיש לך מצביע למערך, אפשר להשתמש באריתמטיקה של מצביעים כדי לנווט בין האיברים. הוספת 1 למצביע מעבירה אותו לאיבר הבא מאותו סוג:
ptr++; // כעת מצביע על numbers[1]
ptr = ptr + 2; // כעת מצביע על numbers[3]אפשר לבצע dereference למצביע בכל מיקום כדי לגשת לערך: *ptr נותן לך את הערך במיקום הנוכחי, ו-*(ptr + 1) נותן לך את הערך של האיבר הבא.
הקשר בין מצביע למערך הזה מאפשר לך לעבור על מערכים באמצעות מצביעים במקום לולאות מסורתיות המבוססות על אינדקס, ומציע גישה חלופית למעבר על מערך.
אתגר
קלצור תוכנית שמשתמשת במצביע כדי לעבור על מערך ולהדפיס כל איבר, וכך מדגימה את הקשר בין מצביעים למערכים.
המערך הבא נתון לך:
int values[6] = {15, 23, 8, 42, 17, 31};התוכנית שלך צריכה:
- ליצור מצביע בשם
ptrשמצביע לאיבר הראשון במערךvalues - להשתמש בחשבון מצביעים כדי לעבור על כל 6 האיברים במערך
- להדפיס כל איבר באמצעות ביטול הפניה למצביע בכל מיקום
- להעביר את המצביע לאיבר הבא באמצעות חשבון מצביעים (להגדיל את ערך המצביע)
הדפס כל איבר בשורה נפרדת בפורמט הבא:
Element: [value]הפלט צריך להציג את כל 6 האיברים לפי הסדר שבו הם מופיעים במערך, תוך גישה אליהם באמצעות ביטול הפניה למצביע ולא באמצעות אינדקס של מערך.
נסו בעצמכם
#include <iostream>
using namespace std;
int main() {
// מערך נתון
int values[6] = {15, 23, 8, 42, 17, 31};
// TODO: צרו מצביע בשם 'ptr' שמצביע על האיבר הראשון במערך
// TODO: השתמשו בלולאה כדי לעבור על כל 6 האיברים באמצעות אריתמטיקה של מצביעים
// TODO: הדפיסו כל איבר באמצעות ביטול הפניה למצביע
// TODO: קדמו את המצביע לאיבר הבא באמצעות אריתמטיקה של מצביעים
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטיםתרגלו בעצמכם: קומפיילר C++ אונליין