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

الإعلان عن المؤشرات

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

الآن بعد أن فهمت ما هي الـ pointers، فلنتعلم كيفية إنشائها. يتبع الإعلان عن متغير pointer صيغة محددة تخبر المترجم بنوع البيانات التي سيشير إليها الـ pointer.

البناء اللغوي الأساسي للإعلان عن pointer هو: data_type *pointer_name;

int *ptr;        // يعلن عن مؤشر إلى عدد صحيح
char *ch_ptr;    // يعلن عن مؤشر إلى حرف
float *f_ptr;    // يعلن عن مؤشر إلى عدد عشري

إن النجمة (*) هي ما يجعل هذا إعلانًا عن pointer. فهي تخبر المترجم (compiler) أن هذا المتغير سيقوم بتخزين عنوان ذاكرة (memory address)، وليس قيمة البيانات الفعلية. عندما تقوم بـ Declare لـ int *ptr;، فإنك تقول "إن ptr عبارة عن pointer يمكنه تخزين عنوان متغير من النوع integer."

من الممارسات الجيدة تهيئة الـ pointer بقيمة NULL إذا كان لا يشير بعد إلى address ذاكرة صالح. هذا يمنعه من الإشارة إلى مواقع ذاكرة عشوائية: int *ptr = NULL;

عند طباعة عناوين الـ pointer باستخدام printf، استخدم مخصص التنسيق %p. يُوصى غالبًا بتحويل الـ pointer إلى (void *) لضمان التوافق والتنسيق الصحيح: printf("%p", (void *)ptr);

لاحظ أن نوع البيانات الذي يسبق النجمة يحدد نوع البيانات التي سيشير إليها الـ pointer. يُعد هذا أمرًا مهمًا لأن أنواع البيانات المختلفة تستهلك مقادير مختلفة من مساحة الذاكرة، ويحتاج المترجم إلى معرفة هذه المعلومات من أجل إدارة الذاكرة بشكل صحيح.

challenge icon

التحدي

سهل
اكتب برنامجًا بلغة C يوضح الصياغة الصحيحة للإعلان عن المؤشرات (pointers). يجب على برنامجك القيام بما يلي:
  1. الإعلان عن مؤشر إلى int باسم int_ptr، وتعيين قيمته الأولية إلى NULL
  2. الإعلان عن مؤشر إلى char باسم char_ptr، وتعيين قيمته الأولية إلى NULL
  3. الإعلان عن مؤشر إلى float باسم float_ptr، وتعيين قيمته الأولية إلى NULL
  4. طباعة عناوين الذاكرة المخزنة في كل مؤشر باستخدام printf مع محدد التنسيق %p. عند الطباعة، قم بتحويل نوع المؤشر إلى (void*) لضمان التنسيق الصحيح، على سبيل المثال: printf("Label: %p\n", (void*)ptr);

يجب أن يعرض مخرج برنامجك عناوين المؤشرات الثلاثة بالتنسيق التالي:

Integer pointer: [address]
Character pointer: [address]  
Float pointer: [address]

لاحظ أن عناوين الذاكرة الفعلية ستختلف، ولكن يجب أن يتطابق التنسيق والتسميات تمامًا كما هو موضح أعلاه.

جرّب بنفسك

#include <stdio.h>

int main() {
    // TODO: أعلن عن المؤشرات الخاصة بك هنا
    
    
    // TODO: اطبع عناوين المؤشرات باستخدام التنسيق المطلوب
    
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow