Twoje pytanie składa się z 2 części.
1 / Jak mogę zadeklarować stały rozmiar tablicy poza tablicą?
Możesz albo użyć makra
#define ARRAY_SIZE 10
...
int myArray[ARRAY_SIZE];
lub użyj stałej
const int ARRAY_SIZE = 10;
...
int myArray[ARRAY_SIZE];
jeśli zainicjowałeś tablicę i musisz znać jej rozmiar, możesz:
int myArray[] = {1, 2, 3, 4, 5};
const int ARRAY_SIZE = sizeof(myArray) / sizeof(int);
drugi sizeof
dotyczy typu każdego elementu tablicy, tutaj int
.
2 / Jak mogę uzyskać tablicę, której rozmiar jest dynamiczny (tj. Nieznany do czasu uruchomienia)?
W tym celu potrzebujesz dynamicznej alokacji, która działa na Arduino, ale generalnie nie jest to zalecane, ponieważ może to spowodować fragmentację „sterty”.
Możesz zrobić (sposób 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));
}
Lub (sposób 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];
Więcej informacji o problemach z fragmentacją sterty można znaleźć w tym pytaniu .