Menu
Coddy logo textTech

מצביעי NULL

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 5 מתוך 63.

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

מצביע NULL הוא מצביע שאינו מצביע לכתובת זיכרון תקפה כלשהי. ב-C, ‏NULL מוגדר בדרך כלל כ-0 או כ-(void*)0. כשאתחלת מצביע ל-NULL, הצהרת במפורש שהוא אינו מצביע כרגע על שום דבר שימושי.

int *ptr = NULL;    // אתחל את המצביע ל-NULL
printf("%p", ptr);  // פעולה זו תדפיס 0 או (nil)

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

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

challenge icon

אתגר

קל

כתוב תוכנית C שמדגימה אתחול ובדיקה תקינים של מצביעי NULL. התוכנית שלך צריכה:

  1. להכריז על מצביע למספר שלם בשם safe_ptr ולאתחל אותו ל-NULL
  2. להכריז על מצביע לתו בשם char_ptr ולאתחל אותו ל-NULL
  3. לבדוק אם safe_ptr הוא NULL באמצעות פקודת if ולהדפיס "safe_ptr is NULL" אם כן
  4. לבדוק אם char_ptr הוא NULL באמצעות פקודת if ולהדפיס "char_ptr is NULL" אם כן
  5. להדפיס את כתובת הזיכרון השמורה ב-safe_ptr באמצעות printf עם מציין הפורמט %p
  6. להדפיס את כתובת הזיכרון השמורה ב-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;
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

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