المصفوفات الديناميكية h5>
في الدورات السابقة على المصفوفات ، درسنا إنشاء مصفوفة مثل هذا:
نبسب ؛
const int Nmax = 1000 ؛
int A [Nmax] ؛
أو نبسب ؛ هذا: pre>
intA [1000] ؛
تنشئ هذه الطريقة مصفوفة ثابتة strong> . عيب واحد هو أن حجم ونوع عناصر المصفوفة لا يمكن تغييرهما أثناء تشغيل البرنامج. & nbsp؛
في المثال أعلاه ، تم إنشاء مصفوفة ثابتة من 1000 عنصر. أي مساحة مخصصة في الذاكرة لتخزين 1000 عنصر من النوع & nbsp؛ int (مصفوفة من 1000 عنصر من النوع & nbsp؛ int ). يتم تخزين عنوان بداية المصفوفة في المتغير & nbsp؛ A . إذا كنت بحاجة إلى معالجة مجموعة من أكثر من 1000 عنصر ، فسيتعين عليك تغيير الوصف وإعادة تجميع البرنامج مرة أخرى. عند العمل مع مصفوفات صغيرة ، سيتم إهدار معظم الذاكرة المخصصة لمصفوفة ثابتة.
من أجل الاستخدام الفعال لذاكرة الكمبيوتر ، من الضروري تخصيصها ديناميكيًا. بمعنى آخر ، يجب تخصيص ذاكرة للكائنات أثناء تنفيذ البرنامج حسب الحاجة (إنشاء كائنات جديدة).
في C ++ ، تم تصميم عمليات & nbsp؛ new & nbsp؛ and & nbsp؛ حذف code> & nbsp؛ لتخصيص ذاكرة الكمبيوتر ديناميكيًا. & nbsp؛ عملية & nbsp؛ new & nbsp؛ يخصص الذاكرة من منطقة الذاكرة الخالية ، وتقوم العملية & nbsp؛ حذف code> & nbsp؛ بإلغاء تخصيص الذاكرة المخصصة. & nbsp؛
نبسب ؛
مثال على إنشاء متغير ديناميكي وحذفه h6>
int * A = int جديد ؛ // إنشاء كائن من النوع int
* أ = 15 ؛ // يحدث تهيئة الكائن من خلال مؤشر (*)
// يمكن أن تتم التهيئة على الفور
// عند التصريح عن كائن ديناميكي
int * B = new int (25) ؛
كوت & lt؛ & lt؛ * A & lt؛ & lt؛ & quot؛ & quot؛ & lt؛ & lt؛ *ب؛ // قيمة الإخراج بالمؤشر
حذف أ ؛ // تحرير الذاكرة المخصصة
حذف B؛
تقوم العملية & nbsp؛ new & nbsp؛ بإنشاء كائن من النوع المحدد ، وتخصيص ذاكرة له ، وإرجاع مؤشر من النوع الصحيح إلى موقع الذاكرة المحدد. إذا تعذر تخصيص الذاكرة ، على سبيل المثال ، إذا لم تكن هناك مناطق خالية ، فسيتم إرجاع مؤشر فارغ ، أي سيعيد المؤشر القيمة 0. تخصيص الذاكرة ممكن لأي نوع بيانات: & nbsp؛ int ، & nbsp؛ تعويم code> ، مزدوج code> ، & nbsp؛ char & nbsp؛ إلخ.
بنفس الطريقة ، في C ++ ، يمكنك إنشاء مصفوفة ديناميكية tt> تستخدم & nbsp ؛ تخصيص الذاكرة الديناميكي. حجم هذه المصفوفة ، والذي يمكن استخدامه أثناء تشغيل البرنامج ، على سبيل المثال ، من لوحة المفاتيح. لإنشاء متغيرات ديناميكية.
نبسب ؛
في بناء جملة C
إنتن.
scanf (& quot؛٪ d & quot ؛، & amp؛ N) ؛
int * mas = malloc (sizeof (int) * N) ؛
// لاحقًا لتغيير حجم المصفوفة
// المستخدمة بواسطة realloc .
...
مجاني (ماس) ؛ // الافراج عن الذاكرة المخصصة
في بناء جملة C ++
إنتن.
سينما & GT ؛ & GT. ن؛
int * A = new int [N] ؛
// لتغيير حجم المصفوفة ، يمكنك ذلك
// نقل البيانات إلى مصفوفة أخرى ، وامسح القديم
...
حذف strong> [] mas ؛ // الافراج عن الذاكرة المخصصة
تشير الأقواس المربعة إلى
// أننا نحرر الذاكرة من تحت المصفوفة
|