הכרזה על מצביעים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 2 מתוך 63.
עכשיו, כשאתה מבין מה הם מצביעים, בוא נלמד איך ליצור אותם. הצהרה על משתנה מצביע נעשית לפי תחביר מסוים, שמורה למהדר לאיזה סוג נתונים המצביע יצביע.
התחביר הבסיסי להכרזה על מצביע הוא: data_type *pointer_name;
int *ptr; // מכריז על מצביע למספר שלם
char *ch_ptr; // מכריז על מצביע לתו
float *f_ptr; // מכריז על מצביע למספר נקודה צפההכוכבית (*) היא שהופכת את ההכרזה הזו להכרזה על מצביע. היא אומרת למהדר שהמשתנה הזה יאחסן כתובת בזיכרון, ולא את ערך הנתונים עצמו. כשמכריזים על int *ptr;, אומרים "ptr הוא מצביע שיכול לאחסן את הכתובת של משתנה מסוג מספר שלם."
נוהג טוב הוא לאתחל מצביעים ל־NULL אם הם עדיין לא מצביעים לכתובת זיכרון תקפה. כך נמנע מהם להצביע על מיקומי זיכרון אקראיים: int *ptr = NULL;
בעת הדפסת כתובות של מצביעים באמצעות printf, השתמשו במציין הפורמט %p. לעיתים קרובות מומלץ להמיר את המצביע ל־(void *) כדי להבטיח תאימות ועיצוב נכון: printf("%p", (void *)ptr);
שימו לב שסוג הנתונים שלפני הכוכבית מציין לאיזה סוג נתונים יצביע המצביע. זה חשוב משום שסוגי נתונים שונים תופסים כמויות שונות של שטח זיכרון, והמהדר צריך לדעת את המידע הזה לצורך ניהול תקין של הזיכרון.
אתגר
קל- להצהיר על מצביע למספר שלם בשם
int_ptr, ולאתחל אותו ל-NULL - להצהיר על מצביע לתו בשם
char_ptr, ולאתחל אותו ל-NULL - להצהיר על מצביע למספר ממשי מסוג float בשם
float_ptr, ולאתחל אותו ל-NULL - להדפיס את כתובות הזיכרון המאוחסנות בכל מצביע באמצעות
printfעם מציין הפורמט%p. בעת ההדפסה, יש להמיר את המצביע ל-(void*)כדי להבטיח עיצוב נכון, לדוגמה:printf("Label: %p\n", (void*)ptr);
הפלט שלך צריך להציג את שלוש כתובות המצביעים בפורמט הבא:
Integer pointer: [address]
Character pointer: [address]
Float pointer: [address]שימו לב שכתובות הזיכרון בפועל עשויות להשתנות, אך הפורמט והתוויות חייבים להתאים בדיוק לדוגמה שלמעלה.
נסו בעצמכם
#include <stdio.h>
int main() {
// TODO: הצהירו כאן על המצביעים שלכם
// TODO: הדפיסו את כתובות המצביעים בפורמט הנדרש
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין