Насправді ваше запитання має 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];
Детальніше про проблеми з фрагментацією купи можна звернутися до цього питання .