Ihre Frage besteht eigentlich aus 2 Teilen.
1 / Wie kann ich die konstante Größe eines Arrays außerhalb des Arrays deklarieren?
Sie können entweder ein Makro verwenden
#define ARRAY_SIZE 10
...
int myArray[ARRAY_SIZE];
oder verwenden Sie eine Konstante
const int ARRAY_SIZE = 10;
...
int myArray[ARRAY_SIZE];
Wenn Sie das Array initialisiert haben und dessen Größe wissen müssen, können Sie Folgendes tun:
int myArray[] = {1, 2, 3, 4, 5};
const int ARRAY_SIZE = sizeof(myArray) / sizeof(int);
Die zweite sizeof
bezieht sich auf den Typ jedes Elements Ihres Arrays int
.
2 / Wie kann ich ein Array haben, dessen Größe dynamisch ist (dh erst zur Laufzeit bekannt ist)?
Dafür benötigen Sie eine dynamische Zuweisung, die auf Arduino funktioniert, aber im Allgemeinen nicht empfohlen wird, da dies dazu führen kann, dass der "Heap" fragmentiert wird.
Sie können (C Weg) tun:
// 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));
}
Oder (C ++ Weg):
// 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];
Weitere Informationen zu Problemen mit der Heap-Fragmentierung finden Sie in dieser Frage .