Menu
Coddy logo textTech

שינוי משתנים באמצעות מצביעים

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

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

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

void doubleValue(int *ptr) {
    *ptr = *ptr * 2;  // בצע דה־רפרנס כדי לשנות את הערך המקורי
}

int main() {
    int x = 5;
    doubleValue(&x);  // העבר את הכתובת של x
    // x הוא כעת 10!
    return 0;
}

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

challenge icon

אתגר

קל

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

התוכנית שלכם צריכה:

  1. ליצור פונקציה בשם tripleValue שמקבלת מצביע למספר שלם כפרמטר
  2. בתוך הפונקציה tripleValue, להשתמש באופרטור ביטול ההפניה כדי להכפיל ב־3 את הערך שבכתובת הזיכרון
  3. בתוך הפונקציה tripleValue, להדפיס את הערך החדש בתבנית: Value tripled to: [value]
  4. בפונקציה main, להכריז על משתנה של מספר שלם בשם number ולאתחל אותו לערך 8
  5. להדפיס את הערך המקורי בתבנית: Original value: [value]
  6. לקרוא לפונקציה tripleValue ולהעביר אליה את הכתובת של המשתנה number באמצעות אופרטור קבלת הכתובת
  7. לאחר קריאת הפונקציה, להדפיס את הערך הסופי של number בתבנית: Final value: [value]

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

Original value: 8
Value tripled to: 24
Final value: 24

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

נסו בעצמכם

#include <stdio.h>

// TODO: כתבו כאן את הפונקציה tripleValue

int main() {
    // TODO: כתבו כאן את הקוד שלכם
    // הכריזו על המשתנה number ואתחלו אותו
    // הדפיסו את הערך המקורי
    // קראו לפונקציה tripleValue
    // הדפיסו את הערך הסופי
    
    return 0;
}
quiz iconבחנו את עצמכם

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

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

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