העברת מצביעים לפונקציות
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 26 מתוך 63.
עכשיו, כשאתם מבינים את המגבלות של העברה לפי ערך, בואו נבחן כיצד העברת מצביעים לפונקציות פותרת את הבעיה הזאת. במקום להעביר עותק של ערך משתנה, תוכלו להעביר לפונקציה את כתובת הזיכרון של המשתנה.
כשמעבירים מצביע לפונקציה, הפונקציה מקבלת גישה למיקום של המשתנה המקורי בזיכרון. פירוש הדבר שהפונקציה יכולה לעבוד ישירות עם הנתונים המקוריים, ולא רק עם עותק שלהם.
void processValue(int *ptr) {
// ptr מחזיק את הכתובת של המשתנה המקורי
// הפונקציה יכולה כעת לגשת למיקום זה בזיכרון
}
int main() {
int x = 10;
processValue(&x); // העבר את הכתובת של x
return 0;
}שימו לב כיצד אנו משתמשים באופרטור כתובת־של & בעת קריאה לפונקציה כדי להעביר את הכתובת של המשתנה. פרמטר הפונקציה מוכרז כ־int *ptr, ומציין שהיא מצפה לקבל מצביע למספר שלם. הטכניקה הבסיסית הזו פותחת אפשרויות רבות עוצמה עבור פונקציות לקיים אינטראקציה עם נתוני התוכנית שלכם.
אתגר
קלכתוב תוכנית C שמדגימה העברת מצביעים לפונקציות. התוכנית שלך צריכה:
- ליצור פונקציה בשם
displayValueשמקבלת מצביע למספר שלם כפרמטר - בתוך הפונקציה
displayValue, להשתמש באופרטור dereference כדי לגשת לערך שבכתובת הזיכרון ולהדפיס אותו בתבנית:Value at address: [value] - בפונקציה
main, להכריז על משתנה של מספר שלם בשםnumberולאתחל אותו בערך 42 - להדפיס את הערך המקורי בתבנית:
Original value: [value] - לקרוא לפונקציה
displayValueולהעביר את הכתובת של המשתנהnumberבאמצעות אופרטור קבלת הכתובת - לאחר קריאת הפונקציה, להדפיס הודעת אישור:
Function call completed
הפלט שלך צריך להדגים שהפונקציה מקבלת בהצלחה את כתובת הזיכרון של המשתנה המקורי וניגשת אליה:
Original value: 42
Value at address: 42
Function call completedהאתגר הזה מציג את הרעיון הבסיסי של העברת מצביעים לפונקציות, וכך מאפשר לפונקציה לגשת למיקום הזיכרון של המשתנה המקורי במקום לעבוד עם עותק של ערכו.
נסו בעצמכם
#include <stdio.h>
// TODO: כתבו כאן את הפונקציה displayValue
int main() {
// TODO: כתבו כאן את הקוד שלכם
// 1. הכריזו על המשתנה number ואתחלו אותו
// 2. הדפיסו את הערך המקורי
// 3. קראו לפונקציה displayValue
// 4. הדפיסו את הודעת הסיום
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין