Ένας πίνακας είναι μια συλλογή μεταβλητών, οι οποίες είναι προσβάσιμες με έναν αριθμό ευρετηρίου. Οι πίνακες στη γλώσσα προγραμματισμού της C, στο οποίο βασίζεται το Arduino, μπορεί να είναι πολύπλοκοι. Όμως η χρήση των απλών πινάκων είναι σχετικά σαφής.

Δημιουργία (Δήλωση) ενός πίνακα

Όλοι οι παρακάτω μέθοδοι αποτελούν τους έγκυρους τρόπους για την δημιουργία (δήλωση) ενός πίνακα.

  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. Σημειώστε ότι, όταν δηλώνετε έναν πίνακα χαρακτήρων, τότε ένα ακόμη στοιχείο είναι απαραίτητο για την αρχικοποίηση του, έτσι ώστε να κρατηθεί ο απαραίτητος κενός χαρακτήρας.

Πρόσβαση σε έναν πίνακα

Οι πίνακες είναι μηδενικοί δείκτες, δηλαδή στην παραπάνω αναφερόμενη αρχικοποίηση του πίνακα, το πρώτο του στοιχείο βρίσκεται μέσα στον δείκτη 0. Ως εκ τούτου:

mySensVals[0] == 2, mySensVals[1] == 4,

και ούτω καθεξής.

Επίσης, αυτό σημαίνει ότι σε έναν πίνακα με δέκα στοιχεία, ο δείκτης εννέα είναι το τελευταίο στοιχείο. Ως εκ τούτου:

     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, μπορεί να γίνει μόνο μέσω της ανάγνωσης από τη μνήμη που είναι σε χρήση για άλλους σκοπούς. Η ανάγνωση από αυτές τις θέσεις κατά πάσα πιθανότητα δεν πρόκειται να κάνει και πολλά, εκτός από το ότι θα αποδώσει λανθασμένα δεδομένα. Η εγγραφή στις τυχαίες θέσεις μνήμης είναι σίγουρα μια κακή ιδέα και συχνά μπορεί να οδηγήσει σε δυσάρεστα αποτελέσματα, όπως είναι τα κρασαρίσματα ή οι δυσλειτουργίες του προγράμματος. Επίσης αυτό μπορεί να είναι ένα δύσκολο σφάλμα εντοπισμού μέσα σε ένα πρόγραμμα.
Σε αντίθεση με την BASIC ή την JAVA, ο μεταγλωττιστής της C δεν κάνει έλεγχο για να ελέγξει εάν η πρόσβαση του πίνακα, πραγματοποιείται εντός των νόμιμων ορίων, σύμφωνα με το μέγεθος του πίνακα που έχετε δηλώσει.

Εκχώρηση τιμής σε έναν πίνακα:
mySensVals[0] = 10;
Ανάκτηση τιμής από έναν πίνακα:
x = mySensVals[4];
Πίνακες και βρόχοι FOR

Συχνά οι πίνακες χειρίζονται μέσα από τους βρόχους του for, όπου ο μετρητής του βρόχου χρησιμοποιείται ως δείκτης για το κάθε στοιχείο του πίνακα. Για παράδειγμα, για να εκτυπώσετε τα στοιχεία ενός πίνακα μέσω της σειριακής θύρας, θα μπορούσατε να κάνετε κάτι σαν αυτό:

int i;
for (i = 0; i < 5; i = i + 1) {
  Serial.println(myPins[i]);
}

Επιστροφή στην σελίδα Παραπομπές Γλώσσας