Votre question comporte en fait 2 parties.
1 / Comment puis-je déclarer la taille constante d'un tableau en dehors du tableau?
Vous pouvez soit utiliser une macro
#define ARRAY_SIZE 10
...
int myArray[ARRAY_SIZE];
ou utilisez une constante
const int ARRAY_SIZE = 10;
...
int myArray[ARRAY_SIZE];
si vous avez initialisé le tableau et que vous devez connaître sa taille, vous pouvez faire:
int myArray[] = {1, 2, 3, 4, 5};
const int ARRAY_SIZE = sizeof(myArray) / sizeof(int);
le second sizeof
concerne le type de chaque élément de votre tableau, ici int
.
2 / Comment puis-je avoir un tableau dont la taille est dynamique (c'est-à-dire inconnue jusqu'à l'exécution)?
Pour cela, vous aurez besoin d'une allocation dynamique, qui fonctionne sur Arduino, mais n'est généralement pas conseillée car cela peut entraîner la fragmentation du "tas".
Vous pouvez faire (voie C):
// Declaration
int* myArray = 0;
int myArraySize = 0;
// Allocation (let's suppose size contains some value discovered at runtime,
// e.g. obtained from some external source)
if (myArray != 0) {
myArray = (int*) realloc(myArray, size * sizeof(int));
} else {
myArray = (int*) malloc(size * sizeof(int));
}
Ou (façon C ++):
// Declaration
int* myArray = 0;
int myArraySize = 0;
// Allocation (let's suppose size contains some value discovered at runtime,
// e.g. obtained from some external source or through other program logic)
if (myArray != 0) {
delete [] myArray;
}
myArray = new int [size];
Pour plus d'informations sur les problèmes de fragmentation de segment, vous pouvez vous référer à cette question .