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

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

جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 7 من 63.

المصفوفات والمؤشرات في لغة C لها علاقة خاصة تعد أساسية لفهم كيفية تعامل لغة C مع البيانات في الذاكرة. عندما تقوم بالتصريح عن مصفوفة، يعمل اسم المصفوفة نفسه كـ مؤشر ثابت للعنصر الأول في المصفوفة.

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

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' يشير إلى العنصر الأول
// numbers == &numbers[0]  // هذه متكافئة!

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

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

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.

ورقة مرجعية

تعمل أسماء المصفوفات في لغة C كـ مؤشرات ثابتة (constant pointers) للعنصر الأول في المصفوفة.

عندما تقوم بالتصريح عن مصفوفة، يشير اسم المصفوفة إلى العنصر الأول:

int numbers[5] = {10, 20, 30, 40, 50};
// يشير 'numbers' إلى العنصر الأول
// numbers == &numbers[0]  // هذه متكافئة!

يمكنك تعيين اسم مصفوفة لمؤشر:

int *ptr;
ptr = numbers;  // يشير ptr الآن إلى العنصر الأول

الوصول إلى القيم باستخدام تدوين المؤشر (pointer notation):

*numbers  // قيمة العنصر الأول عبر اسم المصفوفة
*ptr      // قيمة العنصر الأول عبر المؤشر

الفرق الرئيسي: أسماء المصفوفات هي مؤشرات ثابتة - لا يمكنك تغيير ما تشير إليه، على عكس المؤشرات العادية.

جرّب بنفسك

#include <stdio.h>

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

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

جميع دروس Logic & Flow