الإعلان عن المؤشرات
جزء من قسم 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. يُعد هذا أمرًا مهمًا لأن أنواع البيانات المختلفة تستهلك مقادير مختلفة من مساحة الذاكرة، ويحتاج المترجم إلى معرفة هذه المعلومات من أجل إدارة الذاكرة بشكل صحيح.
التحدي
سهل- الإعلان عن مؤشر إلى
intباسمint_ptr، وتعيين قيمته الأولية إلىNULL - الإعلان عن مؤشر إلى
charباسمchar_ptr، وتعيين قيمته الأولية إلىNULL - الإعلان عن مؤشر إلى
floatباسمfloat_ptr، وتعيين قيمته الأولية إلىNULL - طباعة عناوين الذاكرة المخزنة في كل مؤشر باستخدام
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;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسية