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

عامل إلغاء المرجعية (*)

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

الآن بعد أن عرفت كيفية تخزين العناوين في المؤشرات، تحتاج إلى تعلم كيفية الوصول إلى القيمة الفعلية المخزنة في عنوان الذاكرة هذا. يسمح لك عامل إلغاء المرجعية (*) بـ "تتبع" المؤشر للحصول على القيمة التي يشير إليها.

عندما تضع المعامل * أمام متغير مؤشر (pointer variable)، فإنه يصل إلى القيمة المخزنة في عنوان الذاكرة الذي يحمله المؤشر. فكر في الأمر وكأنك تقول "أعطني ما بداخل الغرفة في هذا العنوان".

int age = 25;
int *ptr = &age;
printf("%d", *ptr);    // يطبع 25 - قيمة age

من المهم أن نفهم أن النجمة (*) لها معنيان مختلفان في لغة C. فعند التصريح عن مؤشر مثل int *ptr;، تشير النجمة إلى أن ptr هو مؤشر. أما عند استخدامها مع مؤشر موجود مثل *ptr، فإنها تقوم بإلغاء مرجع المؤشر للوصول إلى القيمة التي يشير إليها.

يعد عامل إلغاء المرجعية (dereference operator) ضرورياً لأنه يكمل دورة المؤشر: يمكنك تخزين عنوان في مؤشر باستخدام &، ثم استعادة القيمة الموجودة في ذلك العنوان باستخدام *. يتيح لك هذا الوصول إلى المتغيرات وتعديلها بشكل غير مباشر من خلال عناوين الذاكرة الخاصة بها.

challenge icon

التحدي

سهل

اكتب برنامجاً بلغة C يوضح سير العمل الكامل للمؤشرات: التصريح، تعيين العنوان، وإلغاء المرجعية (dereferencing). يجب أن يقوم برنامجك بما يلي:

  1. التصريح عن متغير صحيح (integer) باسم value وتهيئته بالقيمة 75
  2. التصريح عن متغير عشري (float) باسم price وتهيئته بالقيمة 19.99
  3. التصريح عن مؤشر لعدد صحيح باسم value_ptr
  4. التصريح عن مؤشر لعدد عشري باسم price_ptr
  5. استخدام عامل العنوان (address-of operator) لتعيين عنوان value إلى value_ptr
  6. استخدام عامل العنوان (address-of operator) لتعيين عنوان price إلى price_ptr
  7. استخدام عامل إلغاء المرجعية (dereference operator) لطباعة قيمة value من خلال value_ptr
  8. استخدام عامل إلغاء المرجعية (dereference operator) لطباعة قيمة price من خلال price_ptr بمنزلتين عشريتين بالضبط

يجب أن يعرض مخرجك القيم التي تم إلغاء مرجعيتها بالتنسيق التالي:

Value through pointer: 75
Price through pointer: 19.99

يختبر هذا التحدي فهمك لكيفية قيام عامل إلغاء المرجعية باسترداد قيمة المتغير الأصلي عن طريق تتبع العنوان المخزن في المؤشر.

ورقة مرجعية

يسمح لك عامل إلغاء المرجعية (*) بالوصول إلى القيمة المخزنة في عنوان الذاكرة الذي يحمله المؤشر.

int age = 25;
int *ptr = &age;
printf("%d", *ptr);    // يطبع 25 - قيمة age

علامة النجمة (*) لها معنيان مختلفان في لغة C:

  • في التصريحات مثل int *ptr; - تشير إلى أن ptr هو مؤشر
  • مع المؤشرات الموجودة مثل *ptr - تقوم بإلغاء مرجعية المؤشر للوصول إلى القيمة التي يشير إليها

عامل إلغاء المرجعية يكمل دورة المؤشر: قم بتخزين عنوان باستخدام &، ثم استرجع القيمة الموجودة في ذلك العنوان باستخدام *.

جرّب بنفسك

#include <stdio.h>

int main() {
    // TODO: اكتب كودك هنا
    // 1. التصريح عن المتغيرات وتهيئتها
    // 2. التصريح عن المؤشرات
    // 3. تعيين العناوين للمؤشرات
    // 4. طباعة القيم التي تشير إليها المؤشرات
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow