الإعلام الآلي — لغة C: المؤشرات والذاكرة الديناميكية — الثانية ثانوي (شعب علمية) — بكالوريا — المنهاج الجزائري
المؤشرات (Pointers) في لغة C تسمح بالتعامل المباشر مع عناوين الذاكرة. هذا يعطي مرونة كبيرة في برمجة الأنظمة.
1. مفهوم المؤشر
المؤشر هو متغير يخزن عنوان متغير آخر. يعرف بإضافة * قبل اسم المتغير. مثال: int *p; يعني p مؤشر لعدد صحيح.
للحصول على عنوان متغير نستخدم & (عنوان). مثال: int x = 5; int *p = &x; يعني p يشير إلى x.
للوصول إلى قيمة المتغير المدبّر نستخدم * (إلغاء الإشارة). مثال: printf(“%d”, *p); يطبع 5.
2. العمليات على المؤشرات
إسناد عنوان: p = &x; (p يشير إلى x).
تغيير القيمة المدبّرة: *p = 10; (تغيير قيمة x إلى 10).
العمليات الحسابية: p++ ينتقل إلى العنوان التالي (بحجم نوع المؤشر).
3. المؤشرات والمصفوفات
اسم المصفوفة هو مؤشر على أول عنصر فيها. int T[5]; int *p = T; (أو p = &T[0]).
الوصول للعناصر: *(p + i) يعادل T[i].
4. الذاكرة الديناميكية
في لغة C، يمكن تخصيص ذاكرة أثناء تنفيذ البرنامج باستخدام الدوال التالية:
malloc: تخصيص ذاكرة. int *p = (int*)malloc(n * sizeof(int));
calloc: تخصيص ذاكرة مع تهيئة بالأصفار. int *p = (int*)calloc(n, sizeof(int));
realloc: إعادة تخصيص ذاكرة. p = (int*)realloc(p, nouveau_taille);
free: تحرير الذاكرة. free(p);
5. مثال بكالوريا
اكتب برنامجاً بلغة C يطلب من المستخدم إدخال عدد من الأعداد الصحيحة، يخزنها في مصفوفة ديناميكية، ثم يحسب المجموع والمعدل.
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, somme = 0;
int *T;
printf("أدخل عدد الأعداد: ");
scanf("%d", &n);
T = (int*)malloc(n * sizeof(int));
if (T == NULL) {
printf("فشل تخصيص الذاكرة");
return 1;
}
for (i = 0; i < n; i++) {
printf("T[%d] = ", i);
scanf("%d", &T[i]);
somme += T[i];
}
printf("المجموع = %d", somme);
printf("المعدل = %.2f", (float)somme / n);
free(T);
return 0;
}
بكالوريا 2021: اشرح دور الدالة malloc في الكود أعلاه.
الحل: malloc تخصص مساحة ذاكرة ديناميكية بحجم n ضعف sizeof(int). تعيد عنوان أول بايت في الذاكرة المخصصة. إذا فشل التخصيص تعيد NULL.
مدونة التربية و التعليم في الجزائر – دروس، فروض، نتائج امتحانات مدونة التربية والتعليم في الجزائر | تحضير الدروس، فروض واختبارات، نتائج البكالوريا وBEM، مسابقات التوظيف، والتوجيه المدرسي للطلاب وأولياء الأمور.