"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > متى تحتاج إلى إزالة طبقات متعددة من المؤشرات؟

متى تحتاج إلى إزالة طبقات متعددة من المؤشرات؟

نشر في 2025-02-06
تصفح:323

When Do You Need to Dereference Multiple Layers of Pointers?

التي ترتبط بشكل غير مباشر. يشير مؤشر واحد (على سبيل المثال ، char *ptr) إلى موقع ذاكرة يحمل عنوان البيانات الفعلية. يشير مؤشر مزدوج (على سبيل المثال ، Char ** PTR) إلى موقع ذاكرة يحمل عنوان المؤشر ، والذي يشير إلى البيانات نفسه. يضيف المؤشر الثلاثي (على سبيل المثال ، char *** ptr) مستوى آخر من عدم التوجيه. عند استخدام مستويات متعددة من المؤشرات أمر منطقي:

في سياق البرمجة الموجهة للكائنات ، يمكن استخدام مؤشر ثلاثي لتمثيل التسلسل الهرمي للمؤشر المعقد. على سبيل المثال ، ضع في اعتبارك بنية الفئة C التالية:

Class A { عام: شار *ب ؛ } ؛ الفئة ب { عام: شار *ج ؛ } ؛

هنا ، يحتوي كائن A على مؤشر لكائن B ، ويحتوي كائن B على مؤشر إلى Char. للوصول إلى قيمة char من مثيل A ، سنحتاج إلى استخدام dereferencing الثلاثي:

a ؛ char *value = *** A.B.C ؛

على سبيل المثال ، يمكن تنفيذ صفيف ثنائي الأبعاد باستخدام مؤشر مزدوج:

class A {
public:
    char *b;
};

class B {
public:
    char *c;
};

للوصول إلى عنصر في الصفيف ، سنستخدم dereferencing مزدوجة:

A a;
char *value = ***a.b.c;

في بعض الأحيان ، من الضروري الوصول إلى البيانات أو الكائنات بشكل غير مباشر. على سبيل المثال ، في قائمة مرتبطة ، تحتوي كل عقدة على مؤشر للعقدة التالية. لاجتياز القائمة ، نحتاج إلى إطفاء المؤشر للوصول إلى العقدة التالية:

struct node { بيانات int ؛ العقدة *التالي ؛ } ؛ العقدة *الرأس ؛ بينما (الرأس! = فارغ) { int data = head-> data ؛ الرأس = الرأس> التالي ؛ }

char **array;
array = new char*[rows];
for (int i = 0; i  

يمكن استخدام مؤشرات متعددة المستويات لتخصيص الذاكرة وتعاملها بشكل ديناميكي. على سبيل المثال ، يمكن استخدام مؤشر مزدوج لتخصيص الذاكرة لمجموعة من المؤشرات:
A a;
char *value = ***a.b.c;
int ** صفيف ؛ Array = new int*[size] ؛ // تخصيص الذاكرة: لـ (int i = 0 ؛ i الخلاصة:

. عند استخدامها بشكل صحيح ، يمكن للمؤشرات متعددة المستويات تعزيز قابلية قراءة الكود ، والقابلية للصيانة ، والأداء.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3