La tua domanda ha 2 parti in realtà.
1 / Come posso dichiarare la dimensione costante di un array all'esterno dell'array?
Puoi usare una macro
#define ARRAY_SIZE 10
...
int myArray[ARRAY_SIZE];
o usa una costante
const int ARRAY_SIZE = 10;
...
int myArray[ARRAY_SIZE];
se hai inizializzato l'array e devi conoscerne le dimensioni, puoi fare:
int myArray[] = {1, 2, 3, 4, 5};
const int ARRAY_SIZE = sizeof(myArray) / sizeof(int);
il secondo sizeof
è sul tipo di ciascun elemento dell'array, qui int
.
2 / Come posso avere un array la cui dimensione è dinamica (cioè non nota fino al runtime)?
Per questo avrai bisogno di allocazione dinamica, che funziona su Arduino, ma generalmente non è consigliata in quanto ciò può causare la frammentazione dell'heap.
Puoi fare (modo 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));
}
Oppure (modo 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];
Per ulteriori informazioni sui problemi con la frammentazione dell'heap, è possibile fare riferimento a questa domanda .