Su pregunta tiene 2 partes en realidad.
1 / ¿Cómo puedo declarar el tamaño constante de una matriz fuera de la matriz?
Puedes usar una macro
#define ARRAY_SIZE 10
...
int myArray[ARRAY_SIZE];
o usar una constante
const int ARRAY_SIZE = 10;
...
int myArray[ARRAY_SIZE];
Si inicializó la matriz y necesita saber su tamaño, puede hacer lo siguiente:
int myArray[] = {1, 2, 3, 4, 5};
const int ARRAY_SIZE = sizeof(myArray) / sizeof(int);
el segundo sizeof
es sobre el tipo de cada elemento de su matriz, aquí int
.
2 / ¿Cómo puedo tener una matriz cuyo tamaño es dinámico (es decir, no se conoce hasta el tiempo de ejecución)?
Para eso necesitará una asignación dinámica, que funciona en Arduino, pero generalmente no se recomienda, ya que esto puede hacer que el "montón" se fragmente.
Puedes hacer (forma 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));
}
O (forma 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 obtener más información sobre problemas con la fragmentación del montón, puede consultar esta pregunta .