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

عناصر المصفوفة - المؤشرات

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

الآن بعد أن فهمت كيف تعمل أسماء المصفوفات كمؤشرات، يمكنك استخدام هذه المعرفة للوصول إلى عناصر المصفوفة بطريقة مختلفة تمامًا. بدلاً من استخدام تدوين الأقواس المألوف مثل array[i]، يمكنك استخدام تدوين المؤشرات لتحقيق نفس النتيجة.

الفكرة الجوهرية هي أن array[i] يعادل تماماً *(array + i). عندما تكتب array + i، فإنك تخبر لغة C بالتحرك i من المواقع للأمام من بداية المصفوفة. عامل إلغاء المرجعية * يحصل بعد ذلك على القيمة الموجودة في ذلك الموقع.

int numbers[5] = {10, 20, 30, 40, 50};
// هذان السطران يقومان بنفس الشيء تماماً:
printf("%d", numbers[2]);    // يطبع 30
printf("%d", *(numbers + 2)); // يطبع 30 أيضاً

تعمل طريقة تدوين المؤشر هذه لأن لغة C تحسب تلقائيًا عنوان الذاكرة الصحيح بناءً على حجم نوع البيانات. فعندما تضيف 2 إلى مؤشر مصفوفة أعداد صحيحة (integer array pointer)، تتحرك لغة C للأمام بمقدار 2 × sizeof(int) بايت، لتصل تمامًا إلى العنصر الثالث.

فهم هذا التكافؤ يمنحك مرونة في كيفية التعامل مع المصفوفات ويهيئك لتقنيات المؤشرات الأكثر تقدماً التي ستواجهها أثناء استمرارك في تعلم لغة C.

challenge icon

التحدي

سهل

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

  1. الإعلان عن مصفوفة أعداد صحيحة تسمى values تحتوي على 6 عناصر وتهيئتها بالقيم {5, 15, 25, 35, 45, 55}
  2. استخدام حلقة for للتكرار عبر جميع عناصر المصفوفة
  3. داخل الحلقة، استخدم تدوين المؤشر *(values + i) للوصول إلى كل عنصر (لا تستخدم تدوين الأقواس مثل values[i])
  4. طباعة كل عنصر باستخدام طريقة الوصول بتدوين المؤشر
  5. بعد الحلقة، قم بإثبات التكافؤ عن طريق طباعة العنصر الثالث (الفهرس 2) باستخدام الطريقتين:
    • أولاً باستخدام تدوين المؤشر: *(values + 2)
    • ثم باستخدام تدوين المصفوفة التقليدي: values[2]

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

Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25

يختبر هذا التحدي فهمك للتكافؤ بين array[i] و *(array + i)، موضحاً كيف يتيح لك حساب المؤشرات (pointer arithmetic) الوصول إلى عناصر المصفوفة باستخدام حسابات عناوين الذاكرة بدلاً من الفهرسة التقليدية.

ورقة مرجعية

يمكن الوصول إلى عناصر المصفوفة باستخدام ترميز المؤشر بدلاً من ترميز الأقواس. التعبير array[i] يكافئ *(array + i).

عندما تكتب array + i، تتحرك لغة C بمقدار i من المواقع للأمام من بداية المصفوفة. يقوم عامل إلغاء المرجعية * بالحصول على القيمة في ذلك الموقع.

int numbers[5] = {10, 20, 30, 40, 50};
// هذان السطران يفعلان الشيء نفسه تماماً:
printf("%d", numbers[2]);    // يطبع 30
printf("%d", *(numbers + 2)); // يطبع 30 أيضاً

تقوم لغة C تلقائياً بحساب عنوان الذاكرة الصحيح بناءً على حجم نوع البيانات. إضافة 2 إلى مؤشر مصفوفة أعداد صحيحة يؤدي إلى التحرك للأمام بمقدار 2 × sizeof(int) بايت.

جرّب بنفسك

#include <stdio.h>

int main() {
    // TODO: اكتب كودك هنا
    // قم بتعريف وتهيئة المصفوفة 'values' بـ 6 عناصر
    // استخدم حلقة for لطباعة كل عنصر باستخدام تدوين المؤشر *(values + i)
    // بعد الحلقة، اطبع العنصر الثالث باستخدام كل من تدوين المؤشر وتدوين المصفوفة
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow