العودة إلى الدورة

المؤشرات الجزء 3: حساب المؤشرات

لغة C: من الصفر إلى الاحتراف - الدليل الشامل للمبتدئين

الدرس 36: المؤشرات الجزء 3: حساب المؤشرات (Pointer Arithmetic)

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

قاعدة حساب المؤشرات

عندما تضيف عدداً صحيحاً $N$ إلى مؤشر، لا يزداد العنوان بمقدار $N$ بايت، بل بمقدار $N$ مضروباً في sizeof() نوع البيانات التي يشير إليها المؤشر.

العنوان الجديد = العنوان الحالي + (N * sizeof(data_type))

مثال

بفرض أن int هو 4 بايت. يبدأ p عند العنوان 1000.

c int arr[3] = {10, 20, 30}; int *p = arr; // p عند العنوان 1000

p++; // p ينتقل للعنصر الصحيح التالي (العنوان 1004)

printf("%d\n", *p); // المخرجات: 20

p = p + 2; // p ينتقل عنصرين صحيحين للأمام (العنوان 1004 + 8 = 1012) printf("%d\n", *p); // المخرجات: 30

العمليات المسموح بها على المؤشرات

  1. جمع/طرح عدد صحيح: يغير موقع المؤشر.
  2. الزيادة/النقصان (++, --): ينقل المؤشر للعنصر التالي/السابق.
  3. طرح مؤشرين: يحسب عدد العناصر بين مؤشرين (النتيجة عدد صحيح، غالباً من نوع ptrdiff_t).
  4. المقارنة: يمكن مقارنة المؤشرات (==, !=, >, إلخ). يكون هذا مفيداً فقط إذا كانت تشير إلى عناصر داخل نفس المصفوفة.

المؤشرات الفارغة (Void Pointers)

يمكن للمؤشر من نوع void * أن يحمل عنوان أي نوع بيانات. وهو مفيد لعمليات الذاكرة العامة. ومع ذلك، لا يمكنك فك مرجعه أو إجراء عمليات حسابية عليه مباشرة لأن المترجم لا يعرف حجم البيانات التي يشير إليها.