Ваш вопрос состоит из 2 частей на самом деле.
1 / Как я могу объявить постоянный размер массива вне массива?
Вы можете использовать макрос
#define ARRAY_SIZE 10
...
int myArray[ARRAY_SIZE];
или использовать константу
const int ARRAY_SIZE = 10;
...
int myArray[ARRAY_SIZE];
если вы инициализировали массив и вам нужно знать его размер, вы можете сделать:
int myArray[] = {1, 2, 3, 4, 5};
const int ARRAY_SIZE = sizeof(myArray) / sizeof(int);
второй sizeof
тип каждого элемента вашего массива здесь int
.
2 / Как получить массив динамического размера (т.е. неизвестного до времени выполнения)?
Для этого вам понадобится динамическое размещение, которое работает на Arduino, но, как правило, не рекомендуется, так как это может привести к фрагментации «кучи».
Вы можете сделать (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));
}
Или (путь 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];
Подробнее о проблемах с фрагментацией кучи вы можете обратиться к этому вопросу .