Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مؤشرات NULL

جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 5 من 63.

أحيانًا تحتاج إلى التصريح عن مؤشر (pointer) ولكن ليس لديك عنوان ذاكرة صالح لتعيينه إليه على الفور. في هذه الحالات، من المهم تهيئة المؤشر إلى قيمة خاصة تسمى NULL.

مؤشر NULL هو مؤشر لا يشير إلى أي عنوان ذاكرة صالح. في لغة C، يتم تعريف NULL عادةً على أنه 0 أو (void*)0. عندما تقوم بتهيئة مؤشر إلى NULL، فأنت تصرح صراحةً بأنه لا يشير حالياً إلى أي شيء مفيد.

int *ptr = NULL;    // تهيئة المؤشر إلى NULL
printf("%p", ptr);  // سيقوم هذا بطباعة 0 أو (nil)

تعتبر تهيئة المؤشرات إلى NULL ممارسة برمجية جيدة لأنها تمنع المؤشر الخاص بك من احتواء قيم عشوائية. قد يحتوي المؤشر غير المهيأ على أي عنوان ذاكرة عشوائي، مما قد يؤدي إلى سلوك غير متوقع إذا حاولت استخدامه عن طريق الخطأ.

يمكنك التحقق مما إذا كان المؤشر NULL قبل استخدامه، مما يساعد في منع الانهيارات ويجعل الكود الخاص بك أكثر قوة. يصبح فحص السلامة هذا مهمًا بشكل خاص مع زيادة تعقيد برامجك.

challenge icon

التحدي

سهل

اكتب برنامجاً بلغة C يوضح كيفية تهيئة مؤشر NULL والتحقق منه بشكل صحيح. يجب أن يقوم برنامجك بما يلي:

  1. الإعلان عن مؤشر لنوع صحيح (integer) باسم safe_ptr وتهيئته بالقيمة NULL
  2. الإعلان عن مؤشر لنوع حرف (character) باسم 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 مشابه اعتماداً على نظامك، ولكن يجب أن يتطابق التنسيق والتسميات تماماً كما هو موضح أعلاه.

ورقة مرجعية

إنّ مؤشر NULL هو مؤشر لا يشير إلى أي عنوان ذاكرة صالح. في لغة C، يتم تعريف NULL عادةً على أنه 0 أو (void*)0.

قم بتهيئة المؤشرات إلى NULL لمنع قيم القمامة (garbage values) العشوائية:

int *ptr = NULL;    // تهيئة المؤشر إلى NULL
printf("%p", ptr);  // سيطبع هذا 0 أو (nil)

تحقق مما إذا كان المؤشر NULL قبل استخدامه لمنع حدوث أعطال (crashes):

if (ptr == NULL) {
    // من الآمن التعامل مع حالة NULL
}

جرّب بنفسك

#include <stdio.h>

int main() {
    // TODO: اكتب كودك هنا
    // قم بتعريف وتهيئة المؤشرات (pointers) الخاصة بك
    // تحقق مما إذا كانت المؤشرات فارغة (NULL)
    // اطبع المخرجات المطلوبة
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow