سؤال

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

if (some_ptr ==  NULL)

if (*some_ptr == NULL)

شكرًا!

هل كانت مفيدة؟

المحلول

الأول يقوم أولا بمقارنة مع عنوان المتغير إلى NULL، والثاني dereferences المؤشر، والحصول على القيمة الموجودة في ذلك ويقارنها ضد فارغة.

نصائح أخرى

يشير البيان الأول إلى العنوان الفعلي للمؤشر يشير إلى ذلك. في حالة حدوث فارغة (القيمة الممثلة من خلال تحديد NULL)، فهي صحيحة، وإلا لا.

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

الأول هو أنك تقارن المؤشر نفسه ضد NULL، والذي يبدو مرغوب فيه.

والثاني هو أنك تقوم بأول مرة في المؤشر لأول مرة للحصول على القيمة التي تتم مقارنة مع NULL، مثلك تقارن قيمة INT إلى 0. بناء على اسم المتغير الخاص بك.

الأول يقول:
هو some_ptr. باطل؟

والثاني يقول:
هو أيا كان بعض الشيء يشير إلى باطل؟

على سبيل المثال: int * x؛ هنا إذا كنت ترغب في التحقق مما إذا كان X يشير إلى NULL، فكن نستخدم العبارة الأولى. مع نفس int * x، إذا كنت تستخدم البيان الثاني، فأنت تحاول إلغاء المؤشر وتحقق من القيمة التي تشيرها x إلى. لأن NULL هو 0 في C، C ++ يتحقق من القيمة 0 التي يشير x إلى.

تحرير: أيضا مع البيان الثاني، إذا كانت X يشير إلى NULL إلى NULL، ثم تأجيل مؤشر NULL يؤدي إلى انخفاض أساسي على UNIX.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top