آرایه در آردوینو و بهطور کلی در برنامهنویسی، مجموعهای از متغیرهاست که با شمارهی ایندکس، قابلدستیابی هستند. آرایهها در زبان c که آردوینو نیز مبتنی بر این زبان است، میتوانند پیچیده باشند؛ اما استفاده از آرایههای ساده به همان نسبت، راحت است.
ایجاد (اعلان) یک آرایه
همهی روشهای زیر برای تعریف (اعلان) یک آرایه معتبر هستند:
1 2 3 4 | int myInts[6]; int myPins[] = {2, 4, 8, 3, 6}; int mySensVals[6] = {2, 4, -8, 3, 2}; char message[6] = "hello"; |
همانند myInts، میتوانید آرایه را بدون مقداردهی اولیه تعریف کنید.
در myPins یک آرایه تعریف کردهایم اما اندازهی آن را مشخص نکردهایم. خود کامپایلر عناصر را میشمارد و آرایه را با اندازهی مناسب ایجاد میکند.
در انتها همانند mySensVals میتوانید هم اندازهی یک آرایه را تعیین کنید و هم آن را مقداردهی اولیه کنید. توجه کنید که هنگام تعریف یک آرایه از نوع char، به یک خانه بیشتر از مقدار آرایه برای ذخیره کاراکتر null نیاز دارید.
دسترسی به آرایه
آرایهها zero indexed هستند. به این معنا که اولین عنصر (خانهی) هر آرایه دارای شماره (ایندکس) صفر است. بنابراین:
1 | mySensVals[0] == 2, mySensVals[1] == 4, |
همچنین در یک آرایه که 10 عنصر دارد، آخرین عنصر آن، ایندکس 9 را خواهد داشت.
1 2 3 4 5 | int myArray[10]={9,3,2,4,3,2,7,8,9,11}; // myArray[9] contains 11 // myArray[10] is invalid and contains random information (other memory address) // ایندکس نه مقدار یازده را دارد. // ایندکس ده نامعتبر و حاوی دادهای تصادفی است. |
به همین خاطر شما باید هنگام دسترسی و استفاده از آرایهها دقت کافی داشته باشید. خواندن خانههای بعد از انتهای آرایه (خانههای دارای شماره ایندکسی بیشتر از سایز آرایه – 1)، در واقع خواندن از حافطهای است که برای دیگر اهداف تعریف شده است. خواندن از چنین مکانهایی احتمالاً مفید نیست و نتایج و دادههایی نامعتبر را تولید خواهد کرد. نوشتن تصادفیِ خانههای حافظه نیز مناسب نخواهد بود و معمولاً نتایجی مانند خرابی و عملکرد ناصحیح برنامه را به دنبال خواهد داشت. همچنین این باگ بهسختی قابل پیگیری است.
کامپایلر C، بر خلاف BASIC یا JAVA اینکه درخواست دسترسی به آرایه، درون محدودهی تعریفشدهی اندازهی آرایه (کران آرایه) است یا نه را بررسی نمیکند.
انتساب مقدار به آرایه
1 | mySensVals[0] = 10; |
بازیابی (خواندن) مقدار از آرایه
1 | x = mySensVals[4]; |
آرایهها و حلقهی for
آرایهها معمولا درون حلقهی for دستکاری میشوند؛ به نحوی که شمارندهی حلقه، بهعنوان ایندکس عنصرهای آرایه استفاده میشود. بهعنوانمثال برای چاپ کردن عناصر آرایه روی پورت سریال میتوان کدی شبیه به کد زیر نوشت:
1 2 3 4 | int i; for (i = 0; i < 5; i = i + 1) { Serial.println(myPins[i]); } |