העברה לפי ערך
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 25 מתוך 63.
כשמעבירים משתנה לפונקציה ב-C, הפונקציה מקבלת עותק של הערך של המשתנה, ולא את המשתנה עצמו. המושג הבסיסי הזה נקרא העברה לפי ערך.
כך זה עובד: אם יש לך משתנה x שערכו 10 ואתה מעביר אותו לפונקציה, הפונקציה מקבלת עותק נפרד משלה של הערך הזה. כל שינוי שהפונקציה מבצעת בעותק הזה אינו משפיע על המשתנה המקורי בפונקציה שקראה לה.
void tryToChange(int num) {
num = 99; // זה משנה רק את העותק
}
int main() {
int x = 10;
tryToChange(x);
// x עדיין שווה ל-10, לא ל-99
return 0;
}ההתנהגות הזאת מגינה על הנתונים המקוריים שלך מפני שינוי מקרי על ידי פונקציות. עם זאת, פירוש הדבר הוא גם שאם רוצים שפונקציה תשנה בפועל ערך של משתנה, העברה לפי ערך לא תעבוד. חשוב להבין את המגבלה הזאת לקראת לימוד מצביעים והאופן שבו הם יכולים לפתור את הבעיה.
אתגר
קלכתוב תוכנית C שמדגימה את המושג העברה לפי ערך באמצעות ניסיון לשנות משתנה בתוך פונקציה, תוך התבוננות בכך שהמשתנה המקורי נותר ללא שינוי.
התוכנית שלך צריכה:
- ליצור פונקציה בשם
tryToModifyשמקבלת פרמטר של מספר שלם בשםnumber - בתוך הפונקציה
tryToModify, להוסיף 50 לפרמטרnumber - בתוך הפונקציה
tryToModify, להדפיס את הערך ששונה בפורמט:Inside function: [value] - בפונקציה
main, להכריז על משתנה מספר שלם בשםoriginalולאתחל אותו לערך 25 - להדפיס את הערך המקורי לפני קריאה לפונקציה, בפורמט:
Before function call: [value] - לקרוא לפונקציה
tryToModifyולהעביר את המשתנהoriginalכארגומנט - לאחר הקריאה לפונקציה, להדפיס שוב את הערך של
originalבפורמט:After function call: [value]
הפלט שלך צריך להדגים שערכו של המשתנה המקורי נותר ללא שינוי, למרות השינוי שנעשה בתוך הפונקציה:
Before function call: 25
Inside function: 75
After function call: 25האתגר הזה מדגים את המושג הבסיסי של העברה לפי ערך ב-C, שבו פונקציות מקבלות עותקים של משתנים ולא את המשתנים עצמם. שינויים שנעשים בפרמטר בתוך הפונקציה אינם משפיעים על המשתנה המקורי בפונקציה הקוראת.
נסו בעצמכם
#include <stdio.h>
// TODO: כתבו כאן את הפונקציה tryToModify
int main() {
// TODO: כתבו כאן את הקוד שלכם
// 1. הכריזו על המשתנה המקורי ואתחלו אותו
// 2. הדפיסו את הערך לפני הקריאה לפונקציה
// 3. קראו לפונקציה tryToModify
// 4. הדפיסו את הערך לאחר הקריאה לפונקציה
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין