Sua pergunta tem 2 partes, na verdade.
1 / Como posso declarar o tamanho constante de uma matriz fora da matriz?
Você pode usar uma macro
#define ARRAY_SIZE 10
...
int myArray[ARRAY_SIZE];
ou use uma constante
const int ARRAY_SIZE = 10;
...
int myArray[ARRAY_SIZE];
se você inicializou a matriz e precisa saber seu tamanho, pode fazer:
int myArray[] = {1, 2, 3, 4, 5};
const int ARRAY_SIZE = sizeof(myArray) / sizeof(int);
o segundo sizeof
está no tipo de cada elemento da sua matriz, aqui int
.
2 / Como posso ter uma matriz cujo tamanho seja dinâmico (isto é, desconhecido até o tempo de execução)?
Para isso, você precisará de alocação dinâmica, que funciona no Arduino, mas geralmente não é aconselhável, pois isso pode fazer com que o "heap" fique fragmentado.
Você pode fazer (maneira 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 (maneira 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];
Para obter mais informações sobre problemas com a fragmentação de heap, você pode consultar esta pergunta .