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

المؤشرات الفارغة (Null Pointers)

جزء من قسم Logic & Flow في رحلة C++ على Coddy. الدرس 4 من 56.

عندما تُعلن عن pointer، فإنه لا يشير تلقائيًا إلى أي شيء ذي معنى. يحتوي pointer غير المُهيّأ على عناوين ذاكرة عشوائية، ما قد يؤدي إلى أخطاء خطيرة إذا حاولت استخدامه. وهنا تصبح مؤشرات null ضرورية للبرمجة الآمنة.

المؤشر الفارغ هو مؤشر يشير صراحةً إلى لا شيء. في C++ الحديثة، تنشئ مؤشرًا فارغًا بتهيئته باستخدام nullptr:

int* ptr = nullptr;  // ptr أصبح الآن مؤشرًا فارغًا

تشير الكلمة المفتاحية nullptr إلى أن المؤشر لا يشير إلى أي موقع ذاكرة صالح. وهذا أكثر أمانًا بكثير من ترك مؤشر من دون تهيئة، لأنه يمكنك التحقق مما إذا كان المؤشر null قبل محاولة إلغاء الإشارة إليه.

قبل استخدام أي pointer، يجب عليك التحقق من أنه ليس null باستخدام عبارة if بسيطة:

if (ptr != nullptr) {
    // من الآمن استخدام *ptr هنا
    int value = *ptr;
}

تمنع هذه الممارسة برنامجك من التعطل بسبب الوصول إلى مواقع ذاكرة غير صالحة. ابدأ دائمًا بتهيئة pointer إلى nullptr عند تعريفها، وcheck بحثًا عن null قبل تنفيذ dereference.

challenge icon

التحدي

سهل

أنشئ برنامجًا يوضّح الاستخدام الآمن لـ pointer من خلال التحقق من وجود مؤشرات null قبل إلغاء الإشارة إليها.

سيتم توفير input التالي:

  • ‏string ستكون إما "valid" أو "null"

يجب أن يقوم برنامجك بما يلي:

  1. Declare متغيرًا صحيحًا named data وتهيئته بالقيمة 42
  2. Declare مؤشرًا named ptr
  3. إذا كانت input هي "valid"، assign عنوان data إلى ptr
  4. إذا كانت input هي "null"، assign nullptr إلى ptr
  5. استخدم if-statement للتحقق من أن ptr ليس null قبل محاولة استخدامه
  6. إذا لم يكن pointer هو null، اطبع القيمة التي يشير إليها
  7. إذا كان pointer هو null، اطبع رسالة أمان

استخدم تنسيق الإخراج التالي تمامًا:

Value: [value]

بالنسبة إلى مؤشرات null، استخدم هذا التنسيق:

Pointer is null - cannot dereference

جرّب بنفسك

#include <iostream>
#include <string>
using namespace std;

int main() {
    // اقرأ الإدخال
    string input;
    cin >> input;
    
    // أعلن متغير data
    int data = 42;
    
    // TODO: اكتب الكود الخاص بك هنا
    // - أعلن مؤشرًا باسم ptr
    // - تحقق من الإدخال وعيّن القيمة المناسبة لـ ptr
    // - استخدم if-statement للتحقق بأمان واستخدام المؤشر
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow

تدرّب بنفسك: مترجم C++ عبر الإنترنت