الدرس 40: مؤشر إلى مؤشر (المؤشرات المزدوجة)
المؤشر المزدوج (أو المؤشر إلى مؤشر) هو متغير يخزن عنوان متغير مؤشر آخر.
التصريح
يستخدم المؤشر المزدوج علامتي نجمة (**).
c int x = 10; int *p = &x; // p يخزن عنوان x int **pp = &p; // pp يخزن عنوان p
فك مرجع المؤشرات المزدوجة
pp: يحمل عنوانp.*pp: يفك المرجع مرة واحدة، والنتيجة هي محتوىp(وهو عنوانx).**pp: يفك المرجع مرتين، والنتيجة هي محتوىx(وهي القيمة 10).
c printf("قيمة x عبر **pp هي: %d\n", **pp); // 10
// يمكننا تغيير x باستخدام المؤشر المزدوج **pp = 20; printf("القيمة الجديدة لـ x هي: %d\n", x); // 20
تطبيقات المؤشرات المزدوجة
1. تمرير مؤشر بالمرجع
يسمح هذا للدالة بتغيير العنوان الفعلي الذي يحمله متغير المؤشر في الدالة المستدعية (مثل تهيئة مؤشر لهيكل أو إجراء تغيير حجم لمصفوفة ديناميكية).
2. تنفيذ مصفوفات ديناميكية ثنائية الأبعاد
يتطلب إنشاء ماتريكس ثنائية الأبعاد ديناميكياً تخصيص مصفوفة من المؤشرات، حيث يشير كل مؤشر إلى صف مخصص ديناميكياً (مصفوفة من البيانات).
c // تخصيص لـ 10 صفوف (مؤشرات)، كل منها يشير إلى 20 عموداً (أعداد صحيحة) int **dynamic_matrix = (int **) malloc(10 * sizeof(int *)); for (int i = 0; i < 10; i++) { dynamic_matrix[i] = (int *) malloc(20 * sizeof(int)); }