Pertanyaan Anda sebenarnya memiliki 2 bagian.
1 / Bagaimana saya bisa mendeklarasikan ukuran konstan array di luar array?
Anda bisa menggunakan makro
#define ARRAY_SIZE 10
...
int myArray[ARRAY_SIZE];
atau gunakan konstanta
const int ARRAY_SIZE = 10;
...
int myArray[ARRAY_SIZE];
jika Anda menginisialisasi array dan Anda perlu tahu ukurannya maka Anda bisa melakukannya:
int myArray[] = {1, 2, 3, 4, 5};
const int ARRAY_SIZE = sizeof(myArray) / sizeof(int);
yang kedua sizeof
adalah pada jenis setiap elemen array Anda, di sini int
.
2 / Bagaimana saya bisa memiliki array yang ukurannya dinamis (tidak diketahui sampai runtime)?
Untuk itu Anda perlu alokasi dinamis, yang berfungsi pada Arduino, tetapi umumnya tidak disarankan karena ini dapat menyebabkan "tumpukan" menjadi terfragmentasi.
Anda dapat melakukan (cara 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));
}
Atau (C ++ way):
// 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];
Untuk lebih lanjut tentang masalah dengan tumpukan tumpukan, Anda bisa merujuk ke pertanyaan ini .