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

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

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

تمتلك المصفوفات (Arrays) والمؤشرات (Pointers) في لغة C علاقة خاصة تُعد أساسية لفهم كيفية تعامل C مع البيانات في الذاكرة. عندما تقوم بالإعلان عن `array`، فإن اسم الـ `array` نفسه يعمل كـ `pointer` ثابت (constant) يشير إلى الـ `first` `element` في الـ `array`.

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

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

هذا التكافؤ أصل أساسي: numbers و &numbers[0] كلاهما يعطيك عنوان الذاكرة ذاته تمامًا. اسم الـ array هو مجرد طريقة أسهل للإشارة إلى address الـ element الـ first دون الحاجة لاستخدام معامل العنوان.

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

challenge icon

التحدي

سهل

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

  1. Declare لـ array من نوع integer باسم numbers تحتوي على 4 عناصر وinitialize قيمها بـ {10, 20, 30, 40}
  2. Declare لـ pointer يشير إلى integer باسم ptr
  3. Assign اسم الـ array وهو numbers إلى الـ pointer الذي يُدعى ptr
  4. Print الـ address المخزن في numbers باستخدام printf مع محدد التنسيق %p
  5. Print الـ address الخاص بـ First element وهو &numbers[0] باستخدام printf مع محدد التنسيق %p
  6. Print الـ address المخزن في ptr باستخدام printf مع محدد التنسيق %p
  7. Print قيمة الـ first element باستخدام اسم الـ array: *numbers
  8. Print قيمة الـ first element باستخدام الـ pointer: *ptr

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

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

يوضح هذا التحدي أن اسم الـ array يعمل كـ pointer ثابث يتجه إلى الـ first element، وأن numbers و &numbers[0] و ptr تحتوي جميعها على نفس عنوان الذاكرة عند Assign اسم الـ array إلى ptr.

جرّب بنفسك

#include <stdio.h>

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

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

جميع دروس Logic & Flow