Menu
CoddyTech

مقارنة المؤشرات

جزء من قسم المنطق وتدفق التنفيذ في رحلة C على Coddy. الدرس 10 من 63.

لقد تعلمت كيفية التنقل عبر المصفوفات باستخدام حساب المؤشرات. والآن ستكتشف أن المؤشرات يمكن أيضًا مقارنتها باستخدام عوامل المقارنة نفسها التي تستخدمها مع المتغيرات العادية: ==، !=، <، و>.

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

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // يشير إلى العنصر الأول
int *end = numbers + 4;      // يشير إلى العنصر الأخير

if (start < end) {
    printf("start comes before end in memory");
}

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

الفكرة الأساسية هي أن ptr1 < ptr2 تخبرك بأن ptr1 يشير إلى عنصر يظهر في المصفوفة قبل العنصر الذي يشير إليه ptr2. تجعل هذه العلاقة مقارنة المؤشرات مناسبة بطبيعتها للتحكم في الحلقات التي تعالج المصفوفات بالتتابع.

challenge icon

التحدي

سهل

اكتب برنامجًا بلغة C يستخدم مقارنة المؤشرات لاجتياز مصفوفة والعثور على العناصر الواقعة ضمن نطاق محدد. يجب أن يقوم برنامجك بما يلي:

  1. صرّح عن مصفوفة أعداد صحيحة باسم scores تحتوي على 8 عناصر، وتهيئتها بالقيم {45, 78, 92, 63, 87, 34, 91, 56}
  2. صرّح عن مؤشرين إلى أعداد صحيحة: start_ptr وend_ptr
  3. اجعل start_ptr يشير إلى العنصر الأول في المصفوفة
  4. اجعل end_ptr يشير إلى العنصر الأخير في المصفوفة باستخدام حساب المؤشرات
  5. صرّح عن مؤشر باسم current_ptr وتهيئته ليشير إلى العنصر الأول
  6. استخدم حلقة while مع مقارنة المؤشرات (current_ptr <= end_ptr) لاجتياز المصفوفة
  7. داخل الحلقة:
    • تحقق مما إذا كانت القيمة الحالية تقع بين 60 و90 (شاملًا)
    • إذا كانت القيمة ضمن النطاق، فاطبع بالضبط Value [value] is in range
    • إذا لم تكن القيمة ضمن النطاق، فاطبع بالضبط Value [value] is out of range
    • زِد current_ptr للانتقال إلى العنصر التالي
  8. بعد الحلقة، استخدم مقارنة المؤشرات للتحقق من أن current_ptr أصبح الآن بعد نهاية المصفوفة، وذلك بالتحقق مما إذا كان current_ptr > end_ptr
  9. إذا كان الشرط صحيحًا، فاطبع بالضبط Traversal complete

يجب أن تعرض مخرجاتك النتائج بالتنسيق التالي:

Value 45 is out of range
Value 78 is in range
Value 92 is out of range
Value 63 is in range
Value 87 is in range
Value 34 is out of range
Value 91 is out of range
Value 56 is out of range
Traversal complete

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

جرّب بنفسك

#include <stdio.h>

int main() {
    // TODO: اكتب شيفرتك أدناه
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس المنطق وتدفق التنفيذ

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