Main

Référence : Langage Arduino : [ Mini | Standard | Etendue | Maxi ] Librairies : [ Vue d'ensemble | Synthèse ] Infos : [ Comparaison | Changements ]

Tableaux de variables ("Arrays" en anglais)


Description

Un tableau est une collection de variables qui sont accessibles àl'aide d'un numéro d'index. En programmation en langage C, langage sur lequel le langage Arduino est basé, les tableaux peuvent être compliqués, mais utilisé de simples tableaux est relativement simple.

Créer (Déclarer) un tableau

Toutes les méthodes suivantes sont des façons correctes de créer (déclarer) un tableau de variables.

int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";

Vous pouvez déclarer un tableau de variables sans les initialiser, tel que le tableau myInts dans l'exemple.

Dans le tableau myPins de l'exemple, nous déclarons un tableau sans déclarer explicitement une taille. Le compilateur compte les éléments et crée un tableau de la taille appropriée.

Enfin, vous pouvez à la fois initialiser et dimensionner votre tableau, comme avec le tableau mySensVals de l'exemple. Noter que lorsque l'on déclare un tableau de type char, un élément supplémentaire doit être prévu lors de votre initialisation pour y stocker le caractère nul de fin de chaîne.

Accéder aux éléments d'un tableau

Les éléments d'un tableau sont "zero indexés", ce qui veut dire, si l'on se reporte aux initialisations de tableau ci-dessus, que le premier élément du tableau est à l'index 0. Ainsi :

mySensVals[0] == 2, mySensVals[1] == 4, et ainsi de suite

Cela signifie également que dans un tableau de 10 éléments, l'index 9 est les dernier élément. Ainsi :

int myArray[10]={9,3,2,4,3,2,7,8,9,11};
     // myArray[9]    contient 11
     // myArray[10]   n'est pas valide et contient une information aléatoire (autre adresse mémoire)

Pour cette raison, vous devez faire attention lors de l'accès aux tableaux. Accéder à un tableau en dépassant la fin (càd en utilisant un index supérieur à la taille du tableau -1) entraîne la lecture d'emplacement mémoire qui sont utilisés dans d'autres buts. Lire des valeurs depuis ces emplacements n'aura probablement pas beaucoup de conséquence si ce n'est d'obtenir des données invalides. Par contre, écrire des valeurs à des localisation aléatoire de la mémoire est définitivement une mauvaise idée et peut souvent conduire à des résultats malheureux tel qu'un arrêt ou des dysfonctionnement du programme. Et ceci peut être un bogue très difficile à débusquer.

A la différence du langage BASIC ou du langage JAVA, le compilateur C ne vérifie pas si l'accès à un tableau se fait dans les limites autorisées par la taille du tableau que vous avez déclarée.

Utilisation du tableau

Pour attribuer une valeur à un emplacement du tableau :

mySensVals[0] = 10;

Pour obtenir une valeur depuis un emplacement du tableau :

x = mySensVals[4];

Tableau et boucles for :

Les tableaux sont souvent utilisés à l'intérieur de boucle for, où le compteur de la boucle est utilisé en tant qu'index pour chaque élément du tableau. Par exemple, pour afficher les éléments d'un tableau sur le port série, vous pouvez écrire quelque chose comme çà :

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

Exemple

Un exemple de tableau à 2 dimensions (remarquer la syntaxe) :


char touches[LIGNES][COLONNES] = { // tableau de char à 2 dimensions
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
 

Pour un programme d'exemple complet de démonstration de l'utilisation des tableaux, voir le programme d'exemple K2000 dans les Tutoriels (en anglais).

Commentaires utilisateurs

  • A savoir : pour un tableau appelé Array[8], l'identifiant Array utilisé seul correspond à l'adresse du début du tableau en mémoire (l'identifiant Array utilisé ici est en fait un pointeur...). Ainsi, si l'on utilise une fonction qui doit recevoir l'adresse d'un tableau (càd une fonction de la forme void ma_fonction (int *AddrArray) ), on écrira simplement ma_fonction(Array); Voir un exemple de fonction de ce type.
  • Pour connaître la taille d'un tableau, on fera :
    int taille=sizeof(tableau)/ sizeof(tableau[0]); // calcul de la taille du tableau = taille tableau / taille element

Voir également


Page d'accueil de la référence Arduino en français

Corrections, suggestions et nouvelle documentation peuvent être postées sur le Forum Arduino ou à l'adresse suivante : support_at_mon-club-elec_point_fr

Le texte original de la référence Arduino est sous licence Creative Commons Attribution-ShareAlike 3.0 . Les exemples de code dans la référence sont dans le domaine public.

La présente traduction française commentée a été réalisée par Xavier HINAULT (2010-2012) (www.mon-club-elec.fr) et est sous licence Creative Commons Attribution-ShareAlike 3.0.