مؤشر إلى مؤشر في C++

Mwshr Aly Mwshr Fy C



تتناول هذه المقالة مفهوم المؤشر إلى المؤشر في لغة C++. يشير المؤشر إلى المؤشر أو يخزن عنوان مؤشر آخر ويتيح معالجة المؤشرات نفسها. باستخدام هذا المفهوم، يمكننا بسهولة تعديل المؤشر من موقع آخر في الذاكرة. تعد المؤشرات المزدوجة مفيدة في الذاكرة المخصصة ديناميكيًا أو المصفوفات متعددة الأبعاد لمعالجة عناصر المصفوفة. سنناقش هذا المؤشر لعمل المؤشر واستخدامه في لغة C++ مع الأمثلة المناسبة.

السيناريو 1: تمثيل الذاكرة من المؤشر إلى المؤشر

في هذا السيناريو، يكون تعريف المؤشر المزدوج مشابهًا لتعريف المؤشر مع إضافة علامة النجمة (*) قبل اسم المؤشر. يمكننا بسهولة تمثيل موقع الذاكرة لمؤشر مزدوج في C++. يرد مقتطف التعليمات البرمجية من المؤشر إلى المؤشر في ما يلي:







#تشمل
استخدام اسم للمحطة؛
انت مين ( )
{
رقم صحيح  = خمسون ;
كثافة العمليات * بي تي آر؛
بتر = & رقم؛
كثافة العمليات ** ptrr1;
ptrr1 = & بي تي آر؛
cout << 'عنوان ذاكرة المؤشر هو: ' ;
cout << 'ptrr (المؤشر):' << ptrr << ' ' ;
cout << '*ptrr1 (مؤشر مزدوج):' <<* ptrr1 << ' ' ;
cout << 'مخازن القيمة في المؤشر هي: ' ;
cout << '*ptrr = ' <<* ptrr << نهاية؛
cout << '**ptrr1 (مؤشر إلى مؤشر) = ' <<** ptrr1 << نهاية؛
يعود 0 ;
}


في الوظيفة الرئيسية، نأخذ متغيرًا يجب تخزين عنوان ذاكرته في المؤشر. الآن، نقوم بتهيئة المتغير 'digit'. بعد ذلك نعلن عن مؤشر “ptrr” الذي يخزن عنوان الذاكرة “digit”. الآن نعلن عن المؤشر المزدوج الذي اسمه “**ptrr1” الذي يخزن عنوان المؤشر “*ptrr”. في نهاية الكود نعرض ذاكرة وقيمة المؤشر والمؤشر المزدوج على شاشة وحدة التحكم. ومخرجات هذا الكود مذكورة في ما يلي:




عنوان الذاكرة لمؤشر 'ptrr' هو '0x6ffe04'، كما يقوم المؤشر '*ptrr1' أيضًا بتخزين عنوان الذاكرة لمؤشر 'ptrr'. القيمة المخزنة داخل المؤشر هي '50'. بشكل أساسي، عنوان المؤشر المزدوج هو دائمًا نفس عنوان ذاكرة المؤشر.



السيناريو 2:  مؤشر إلى مؤشر كمعلمة دالة

في هذا السيناريو، سوف نتعلم كيفية تمرير المؤشر المزدوج في أي دالة كمعلمة لتنفيذ تخصيص الذاكرة المؤقتة في أي متغير. تم ذكر مقتطف التعليمات البرمجية لمعلمة الوظيفة ذات المؤشر المزدوج فيما يلي:





#تشمل
الحصول على عنوان الذاكرة باطلة ( كثافة العمليات ** double_ptr ) {
الطقس لك = 200 ;
* double_ptr = & درجة حرارة؛
}

انت مين ( ) {
كثافة العمليات * ptr_1;
كثافة العمليات ** double_ptr;
double_ptr = & ptr_1;
getMemoryAddress ( double_ptr ) ;
الأمراض المنقولة جنسيا::كوت << 'قيمة **double_ptr هي:' << ** double_ptr << ستد::endl;
يعود 0 ;
}


هنا، سوف نتعلم كيف يعمل مفهوم المؤشر إلى المؤشر في لغة C++. تذكر أنه تم الإعلان عن مؤشر واحد في البرنامج للعمل بمؤشر مزدوج. لذلك، قمنا ببناء وظيفة 'getMemoryAddress'. لقد قمنا بتصميم هذه الوظيفة بحيث تحصل تلقائيًا على عنوان الذاكرة الخاص بالمؤشر المزدوج عندما نمرر المعلمة.

في الدالة، نأخذ المتغير 'tempp' والمؤشر المزدوج '**double_ptr'. نقوم بتمرير عنوان المتغير المحدد وهو 'tempp' إلى المؤشر المزدوج وقيم المؤشر المزدوج كوسيطة للدالة. يعرض البرنامج نتيجة رمز الوظيفة الرئيسية على شاشة وحدة التحكم، وبالتالي تكون جميع الأشياء الموجودة في الوظيفة الرئيسية قابلة للتنفيذ. نحن نأخذ المؤشر 'ptr_1' والمؤشر المزدوج كـ 'double_ptr' في الوظيفة الرئيسية. نقوم بتمرير عنوان المؤشر إلى المؤشر المزدوج.



الآن، نقوم بتمرير متغير المؤشر المزدوج في دالة التجاوز ونمرر المؤشر إلى متغير المؤشر في عبارة دفق الإخراج 'cout' لإظهار نتيجة المؤشر المزدوج.

عندما يصل المترجم إلى وظيفة التجاوز، يقوم مدقق المترجم حيث تم تعريف هذه الوظيفة بتنفيذ التعليمات البرمجية داخل الوظيفة وإرجاع النتيجة إلى الوظيفة الرئيسية.

يتم إرفاق إخراج هذا الكود في ما يلي:


النتيجة: قيمة المؤشر المزدوج هي 200.

السيناريو 3:  استخدام الصفيف ثنائي الأبعاد مع مؤشر إلى مؤشر

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

انت مين ( ) {
صفوف ثابتة int = 3 ;
const int cols = 2 ;
كثافة العمليات ** المصفوفة = كثافة العمليات الجديدة * [ صفوف ] ;
ل ( إنت ط = 0 ; أنا < صفوف؛ ++أنا ) {
مصفوفة [ أنا ] = كثافة العمليات الجديدة [ كولز ] ;
}
ل ( إنت ط = 0 ; أنا < صفوف؛ ++أنا ) {
ل ( كثافة العمليات ي = 0 ; ي < كولز؛ ++ي ) {
مصفوفة [ أنا ] [ ي ] = ط * كولز + ي؛
}
}
ل ( إنت ط = 0 ; أنا < صفوف؛ ++أنا ) {
ل ( كثافة العمليات ي = 0 ; ي < كولز؛ ++ي ) {
cout << مصفوفة [ أنا ] [ ي ] << ' ' ;
}
cout << نهاية؛
}
ل ( إنت ط = 0 ; أنا < صفوف؛ ++أنا ) {
يمسح [ ] مصفوفة [ أنا ] ;
}
يمسح [ ] مصفوفة؛
يعود 0 ;
}


كما نعلم جميعًا، لدينا العديد من الصفوف وعدة أعمدة في مصفوفة ثنائية الأبعاد. في الوظيفة الرئيسية، نقوم بتهيئة الصفوف والأعمدة التي تحتوي على 'const int'. بعد ذلك، نقوم بتخصيص مساحة الذاكرة للصفوف ومساحة الذاكرة للأعمدة على طول كل صف. نقوم بتمرير قيمة عدد الصفوف كمؤشر في المصفوفة بمؤشر مزدوج باسم '**matrix'. في هذا المؤشر المزدوج، يتم تنفيذ حلقة عدد الصفوف أو تكون صحيحة. ثم يتم تنفيذ حلقة داخلية أخرى حتى يتحول الشرط إلى خطأ.

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

يتم إرفاق مخرجات المصفوفة ثنائية الأبعاد بمؤشر مزدوج فيما يلي:

السيناريو 4:  تبديل المؤشرات باستخدام مؤشر إلى مؤشر

سنتعلم هنا كيفية تبديل المؤشرات في لغة C++ من خلال الإعلان عن المؤشر المزدوج. مقتطف الكود الخاص بهذا السيناريو مرفق فيما يلي:

#تشمل
مبادلة باطلة ( كثافة العمليات ** ptrr_1، أنت ** ptrr_2 ) {
كثافة العمليات * temp_var = * ptrr_1;
* ptrr_1 = * ptrr_2;
* ptrr_2 = temp_var;
}
انت مين ( ) {
كثافة العمليات س = خمسة عشر ، ص = 25 ;
كثافة العمليات * بترا = & س, * بترب = & و؛
الأمراض المنقولة جنسيا::كوت << 'قبل المبادلة: *ptrrA = ' << * ptrrA << '، *ptrrB هو = ' << * ptrrB << ستد::endl;
تبديل ( & بترا, & ptrrB ) ;
الأمراض المنقولة جنسيا::كوت << 'بعد المبادلة: *ptrrA  is = ' << * ptrrA << '، *ptrrB  هو= ' << * ptrrB << ستد::endl;
يعود 0 ;
}


أولاً، نبني دالة المبادلة، ونمرر كلا المؤشرين كوسيطة للدالة. في وظيفة المبادلة، نأخذ مؤشر 'درجة الحرارة' ونمرر قيمة 'مؤشر 1' في درجة الحرارة لبعض الوقت. ثم نقوم بتمرير قيمة 'المؤشر2' إلى 'المؤشر1'. في النهاية، نقوم بتمرير قيمة المؤشر 'temp' إلى 'pointer2'.

في الوظيفة الرئيسية، نحتاج إلى مؤشرين نمررهما أو نتجاوزهما في وظيفة 'المبادلة'. نقوم بتمرير عناوين المتغيرات إلى المؤشرات المحددة. ثم يتم عرض قيمة المؤشر قبل وبعد تبديل المؤشر.

يتم إرفاق إخراج هذا الكود في ما يلي:


كما نرى، تم تبديل قيم المؤشر بنجاح باستخدام مؤشر مزدوج في لغة C++.

خاتمة

لقد خلصنا إلى أن المؤشر إلى المؤشر يخزن دائمًا عنوان الذاكرة لأي مؤشر في C++. يمكننا استخدام المؤشر المزدوج لاستخدام موقع الذاكرة لأي مؤشر مؤقتًا في أي لحظة. هذه طريقة فعالة جدًا لمعالجة عنوان الذاكرة بشكل غير مباشر والتعامل مع البيانات.