تخطَّ إلى المحتوى

nullptr

nullptr وnullptr_t: مؤشّر فارغ آمن النوع nullptr

nullptr قيمة جديدة في C23 بنوع مخصّص nullptr_t، تتحوّل تلقائيًا لأي نوع مؤشّر ولا يمكن الخلط بينها وبين عدد صحيح كما يحدث أحيانًا مع NULL.

NULL تقليديًا مجرد ماكرو، غالبًا ((void*)0) أو 0 حسب المكتبة، وهذا يفتح احتمال معاملته كعدد صحيح بالخطأ في بعض السياقات مثل الدوال متغيّرة المعاملات. C23 يضيف nullptr كقيمة أصيلة باللغة من نوع مخصّص nullptr_t، يتحوّل ضمنيًا لأي نوع مؤشّر (بما فيها مؤشّرات الدوال) لكنه ليس عددًا صحيحًا إطلاقًا.

nullptr_t معرّف في stddef.h، وله قيمة صالحة وحيدة هي nullptr نفسها. الفكرة الأساسية: nullptr أوضح نيّة وأكثر أمانًا من NULL في كود C23 الجديد، مع بقاء NULL صالحًا للتوافق مع كود أقدم.

الصياغة

Type *p = nullptr;

📄 مثال

#include <stdio.h>

int main(void) {
    int *p = nullptr;
    if (p == nullptr) {
        printf("المؤشر فارغ\n");
    }
    return 0;
}

أهم النقاط

العنصرالوظيفة
nullptrالقيمة نفسها — تتحوّل تلقائيًا لأي نوع مؤشّر
nullptr_tنوع nullptr، معرّف في stddef.h
NULLما زال صالحًا للتوافق، لكن nullptr أوضح وأكثر أمانًا بكود جديد

💡 نصائح عملية

  • فضّل nullptr على NULL بكود C23 جديد لوضوح النيّة وتفادي التباس الأنواع
  • قارن المؤشّرات بـ nullptr مباشرة بدل 0 لزيادة وضوح الكود

⚠️ أخطاء شائعة

  • تمرير nullptr لدالة variadic قديمة (مثل execl) دون تحويل صريح متى ما احتاج توقيعها ذلك تحديدًا
  • الظن أن nullptr يمكن تحويله لعدد صحيح مثل NULL أحيانًا — nullptr ليس رقمًا إطلاقًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار C الكامل بالعربي.