Menu
Coddy logo textTech

מצביעים כפרמטרים

שיעור 7 מתוך 14 בקורס מצביעים ב-C++ של Coddy.

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

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

void swap(int x, int y) {
    int temp = x;
    x = y;
    y = temp;
    cout << x << " " << y << endl;
}

int main() {
    int a = 10, b = 20;
    cout << a << " " << b << endl;
    swap(a, b);
    cout << a << " " << b;
}
Output:
10 20
20 10
10 20

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

void swap(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp;
    cout << *x << " " << *y << endl;
}

int main() {
    int a = 10, b = 20;
    cout << a << " " << b << endl;
    swap(&a, &b);
    cout << a << " " << b;
}
Output:
10 20
20 10
20 10

פתרנו את הבעיה. כעת, במקום להעביר ערכים, אנחנו מעבירים כתובות שבהן הערכים נמצאים, וכארגומנטים בפונקציה אנחנו מקבלים מצביעים שמחזיקים את הכתובות האלה. אנחנו יוצרים מספר שלם temp, שמקבל את הערך שמתקבל מביטול ההפניה של x. הערך שבכתובת של x (שהיא אותה כתובת כמו a בפונקציה main()) משתנה לערך של y (הערך ההתחלתי מהכתובת של b), ולבסוף y לאחר ביטול ההפניה מקבל את הערך של temp. מכיוון ששינינו את הערכים בכתובות הנתונות, ולא את הערכים הנתונים עצמם, השינוי נשמר.

quiz iconבחנו את עצמכם

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

quiz iconבחנו את עצמכם

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

quiz iconבחנו את עצמכם

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

challenge icon

אתגר

קל

השלם את הפונקציה Calculator, שמשנה באופן קבוע את הערכים של המשתנים large ו־small: הפחת מ־large את ההפרש בין large ל־small, ואת small יש להכפיל בעצמו.

קלט
5 3

פלט
5 3
3 9

הסבר
חיסור ההפרש בין 5 ל־3, שהוא 2, מ־5 נותן 5 - 2 = 3, ואילו הכפלת 3 בעצמו נותנת 9

הערה: אין לכתוב את הפונקציה main()

נסו בעצמכם

#include <iostream>

using namespace std;

void Calculator(// קבל ארגומנטים: large & small) {
    // הכנס קוד לחישובים
}


// אל תכתוב את הפונקציה main()

כל השיעורים ביחידה מצביעים ב-C++

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