Arduino/array
المصفوفة هي مجموعة من المتغيرات الموضوعة في وعاء واحد والتي يمكن الوصول إليها عبر رقم فهرس كلٍّ منها. يمكن أن تكون المصفوفات في لغة C، التي ترتكز عليها لغة أردونيو، معقدةً ولكن استعمال المصفوفات بأبسط شكل لها هو أمر سهل وواضح.
إنشاء مصفوفة
يوجد عدة طرائق لإنشاء مصفوفة منها:
int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";
يمكنك التصريح عن مصفوفة دون تهيئتها ووضع قيم فيها كما في المصفوفة myInts
. ويمكن التصريح عن مصفوفة دون تحديد حجمها بوضوح مثل المصفوفة myInts
؛ سيَعُدُّ المصرَّف في هذه الحالة العناصر وينشئ مصفوفةً بحجم مناسب.
على كل حال، يمكنك تهيئة مصفوفة وتحديد حجمها كما في حالة المصفوفة mySensVals
. انتبه إلى أنَّه عند التصريح عن مصفوفة من المحارف، تحتاج إلى زيادة حجم المصفوفة عن الحجم المطلوب لتتسع إلى عنصرٍ إضافيٍّ واحدٍ فقط هو المحرف العدمي (null) الذي يتوضع في نهاية المحارف؛ انظر مثلًا إلى حجم المصفوفة message
في المثال السابق وعدد المحارف المخزَّنة فيها.
الوصول إلى المصفوفة
تبدأ فهرسة العناصر في المصفوفة من القيمة 0؛ أي فهرس العنصر 2 في المصفوفة mySensVals
-في المثال السابق- هو 0، وفهرس العنصر 4 (العنصر الثاني) هو 1 وهلم جرًّا. هذا يعني أيضًا أنَّ فهرس العنصر الأخير لمصفوفة مكونة من 10 عناصر هو 9 وليس 10! إليك هذا المثال:
int myArray[10]={9,3,2,4,3,2,7,8,9,11};
// يحوي القيمة 11 myArray[9] العنصر
// فهو يفع خارج المصفوفة وقد myArray[10] أمَّا العنصر
// يعيد قيمة عشوائية من الذاكرة
لهذا السبب، يجب عليك أن تكون حذرًا من الوقوع في هذا الخطأ عند الوصول إلى أي عنصر من عناصر مصفوفة. الوصول إلى عنصر يقع بعد العنصر الأخير (الذي فهرسه أكبر من حجم المصفوفة - 1)، أو خارج المصفوفة بشكل عام، يؤدي إلى القراءة من جزء من الذاكرة يُستعمَل لأغراض أخرى. قراءة هذا الجزء لا يعيد قيمًا أو بيانات صالحة. على النقيض، الكتابة على جزء من الذاكرة خارج الجزء المخصص للمصفوفة، عند إسناد قيمة إلى أحد عناصرها، هو أمر سيء وأكثر خطورة من قراءة هذا الجزء، إذ قد يؤدي إلى نتائج كارثية وغير متوقع مثل تحطم البرنامج أو توقفه عن العمل. هذا الخطأ قد يكون من الأخطاء التي يصعب تتبعها وتنقيحها.
لا يتحقَّق مصرِّف لغة C من عمليات الوصول إلى المصفوفات المعرَّفة في البرنامج وإن كانت إحدى عمليات الوصول تتجاوز حدود إحداها خلافًا للغة BASIC أو JAVA لتي تتحقق من هذا الأمر.
إسناد قيمة إلى أحد عناصر مصفوفة
يمكن اسناد أي قيمة إلى أحد عناصر المصفوفة باستعمال معامل الإسناد =
وفهرس العنصر المراد إسناد القيمة إليه بالشكل التالي:
mySensVals[0] = 10;
جلب قيمة من مصفوفة
يمكن جلب قيمة أي عنصر من عناصر مصفوفة بمعرفة فهرس هذا العنصر كما يلي:
x = mySensVals[4];
المصفوفات وحلقات التكرار
تستعمَل المصفوفات بكثرة داخل حلقات التكرار لتعديلها أو جلب قيم عناصرها، إذ يُستعمَل عداد الحلقة على أنَّه فهرس كل عنصر من عناصر المصفوفة. على سبيل المثال، لطباعة جميع عناصر مصفوفة على واجهة التخاطب التسلسلية، يمكنك استعمال شيء شبيه بالمثال التالي:
int i;
for (i = 0; i < 5; i = i + 1) {
Serial.println(myPins[i]);
}
أمثلة
إن أردت مثالًا كاملًا يوضَّح فيه استعمال المصفوفات بالتفصيل الممل، اطلع على هذا المثال.