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

أسماء المصفوفات كمؤشرات

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

تتمتع المصفوفات والمؤشرات في C بعلاقة خاصة تُعد أساسية لفهم كيفية تعامل C مع البيانات في الذاكرة. عند Declare مصفوفة، يعمل اسم array نفسه كـ مؤشر pointer ثابت إلى العنصر first في array.

هذا يعني أنه عندما يكون لديك مصفوفة مثل int numbers[5];، فإن الاسم numbers هو في الأساس مؤشّر يشير دائمًا إلى numbers[0]. يمكنك التفكير في اسم المصفوفة على أنه مؤشّر مضمّن لا تحتاج إلى تعريفه بشكل منفصل.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' points to the first element
// numbers == &numbers[0]  // هذه متكافئة!

هذا التكافؤ بالغ الأهمية: يمنحك كلٌّ من numbers و&numbers[0] عنوان الذاكرة نفسه تمامًا. اسم المصفوفة هو مجرد طريقة أكثر ملاءمة للإشارة إلى عنوان العنصر first دون الحاجة إلى استخدام عامل الحصول على العنوان.

إن فهم هذه العلاقة يفتح الباب أمام استخدام تقنيات pointer مع array، مما قد يجعل شفرتك أكثر مرونة وكفاءة. والفرق الرئيسي هو أنه، بخلاف pointer العادية، فإن أسماء array هي pointer ثابتة - ولا يمكنك تغيير ما تشير إليه.

challenge icon

التحدي

سهل

اكتب برنامجًا بلغة C يوضّح التكافؤ بين أسماء المصفوفات والمؤشرات إلى عناصرها الأولى. يجب أن يقوم برنامجك بما يلي:

  1. تصريح عن مصفوفة أعداد صحيحة باسم numbers تحتوي على 4 عناصر وتهيئتها بالقيم {10, 20, 30, 40}
  2. تصريح عن مؤشر إلى عدد صحيح باسم ptr
  3. إسناد اسم المصفوفة numbers إلى المؤشر ptr
  4. طباعة العنوان المخزّن في numbers باستخدام printf مع محدِّد التنسيق %p
  5. طباعة عنوان العنصر الأول &numbers[0] باستخدام printf مع محدِّد التنسيق %p
  6. طباعة العنوان المخزّن في ptr باستخدام printf مع محدِّد التنسيق %p
  7. طباعة قيمة العنصر الأول باستخدام اسم المصفوفة: *numbers
  8. طباعة قيمة العنصر الأول باستخدام المؤشر: *ptr

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

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

يوضّح هذا التحدي أن اسم المصفوفة يعمل كمؤشر ثابت إلى العنصر الأول، وأن numbers و&numbers[0] وptr تحتوي جميعها على عنوان الذاكرة نفسه عند إسناد اسم المصفوفة إلى ptr.

جرّب بنفسك

#include <stdio.h>

int main() {
    // TODO: اكتب الكود الخاص بك هنا
    // 1. أعلن ومهّئ المصفوفة 'numbers' بـ {10, 20, 30, 40}
    // 2. أعلن عن مؤشر إلى عدد صحيح باسم 'ptr'
    // 3. عيّن اسم المصفوفة إلى المؤشر
    // 4. اطبع جميع العناوين والقيم المطلوبة
    
    return 0;
}
quiz iconاختبر نفسك

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

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

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