البرمجة

تحليل وتحسين كود الصفوف والمؤشرات في C++

في مقالتي هذه، سأقوم بتحليل الكود الخاص بك وتوضيح الأخطاء التي قد تكون سببًا في توقف البرنامج عن العمل. سنقوم بتصحيح هذه الأخطاء وفهم كيفية تفاعل المؤشرات مع الذاكرة.

لنبدأ بتحليل الكود:

cpp
#include using namespace std; int main() { int *j[5]; (*j)[0] = 1; (*j)[1] = 13; (*j)[2] = 5; (*j)[3] = 7; (*j)[4] = 2; cout << "The original order: "; for (int i = 0; i < 5; i++) { cout << (*j)[i] << " "; } return 0; }

أولًا، لديك مصفوفة من المؤشرات int *j[5];. هنا، كل عنصر في المصفوفة هو مؤشر إلى int، ولكن لم تخصص ذاكرة لتلك المؤشرات بشكل فردي.

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

cpp
#include using namespace std; int main() { int *j[5]; for (int i = 0; i < 5; i++) { j[i] = new int; } j[0][0] = 1; j[1][0] = 13; j[2][0] = 5; j[3][0] = 7; j[4][0] = 2; cout << "The original order: "; for (int i = 0; i < 5; i++) { cout << j[i][0] << " "; } // تحرير الذاكرة بعد الانتهاء من استخدامها for (int i = 0; i < 5; i++) { delete j[i]; } return 0; }

الآن تم تخصيص ذاكرة لكل مؤشر بشكل فردي باستخدام new، ويتم الوصول إلى القيم باستخدام j[i][0]. لا تنسى تحرير الذاكرة بعد الانتهاء من استخدامها باستخدام delete.

المزيد من المعلومات

بالطبع، سنقوم الآن بتوسيع الموضوع لتشمل معلومات إضافية حول المصفوفات والمؤشرات في لغة C++، ونقدم بعض الإرشادات حول كيفية تحسين الكود.

المصفوفات والمؤشرات في C++

في C++، يُمكننا استخدام المؤشرات للإشارة إلى مواقع الذاكرة. المصفوفة هي تجميع للعناصر من نفس النوع، ويمكن استخدام المؤشرات للإشارة إلى عناصر المصفوفة بشكل فعال.

عند تعريف مصفوفة من المؤشرات مثل int *j[5];، يعني ذلك أن لدينا 5 مؤشرات تشير إلى int. ولكن يجب تخصيص ذاكرة لكل مؤشر قبل الوصول إليه.

تحسين الكود

لتحسين الكود، يمكننا استخدام مصفوفة عادية بدلاً من مصفوفة المؤشرات، حيث يسهل التعامل معها وتوفير الكثير من العمل. إليك نسخة محسنة من الكود:

cpp
#include using namespace std; int main() { const int size = 5; int j[size] = {1, 13, 5, 7, 2}; cout << "The original order: "; for (int i = 0; i < size; i++) { cout << j[i] << " "; } return 0; }

هذا الكود يستخدم مصفوفة عادية int j[size] بدلاً من مصفوفة المؤشرات. يتم تعيين القيم مباشرة عند تعريف المصفوفة. هذا يجعل الكود أكثر وضوحًا وأقل تعقيدًا.

الختام

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

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر