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