هل يمكن معرفة عدد العناصر المصفوفة في وقت التشغيلRuntime؟

  • Windows_1

Arrays are a compound type (§ 2.3, p. 50). An array declarator has the form a[d], where a is the name being defined and d is the dimension of the array. The dimension specifies the number of elements and must be greater than zero. The number of elements in an array is part of the array’s type. As a result, the dimension

must be known at compile time, which means that the dimension must be a constant expression (§ 2.4.4, p. 65): 

لقد قرأت هذا من كتاب C++ primer the fifth edition يدل على أن حجم المصفوفة يجب أن يكون معروف عند الكومبيل تايم ولكن جربت أن أُحدده في وقت التشغيل فلم يحدث معي أي مشاكل فما السبب مع الملاحظة أني هذا الكتاب يتحدث عن C++11.فسؤالي هو لماذا نجح معي عند تحديدي لحجم المصفوفة في وقت التشغيل أم هذه ميزة تمت إضافتها في الإصدارات الحديثة من C++ أم هذه ميزة من المترجم وليس من قواعد اللغة؟وإذا كانت ميزة جديدة في الإصدرات الحديثة من سي بلس بلس فما الفرق عند تحديد حجم المصفوفة في وقت التشغيل و وقت الترجمة؟

هذا الكود الذي استخدمته :

#include <iostream>


int main(){


int arrsize = 0;
std::cout << "Enter the array size ";std::cin >> arrsize;
int arr[arrsize];
for(int loop = 0; loop != arrsize; loop++)
{
arr[loop] = loop;
}
for(auto v : arr)
{
std::cout << std::endl << v;
}
std::cin.ignore();
getchar();
return 0;
}

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

المصفوفة في ++c لها حجم كلي ثابت يتم التعرف عليه أثناء ترجمة الشفرة البرمجية compiling أي أن الحجم هو مايكتبه المبرمج في الشيفرة.

ولكن غالبا ما نحجز عدد عناصر أكبر من المطلوب لاداعي الأمان وفي حال دعت الحاجة لذلك .

لحساب عن عدد العناصر المستخدمة فعلياً في مصفوفة، يمكنك عمل المنطق التالي:

إن كان لبرنامجك قيد بأن عناصر المصفوفة هي أعداد موجبة، يمكن تهيئة المصفوفة بقيمة مثلا. -1. وعند عمل البرنامج سوف يتم تخزين القيم الصحيحة مكان قيمة -1 حسب المطلوب ضمن البرنامج.

عندما تريد معرفة عدد العناصر المستخدمة، يمكنك عمل حلقة. For على المصفوفة و حساب عدد العناصر التي لا تساوي قيمة -1 أي تم تعديلها.. وبذلك تحسبهم بطريقة سهلة.

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

آسف لقد غيرت السؤال ليكون واضحا أكثر.

كلاهما يعمل بشكل جيد، تحديد حجم المصفوفة قبل التشغيل يجبرك على وضع قيمة ربما تكون أكبر أو أقل من المطلوب أما تحديدها بمتغير عند التشغيل هو حل مثالي أكثر،