Câu hỏi của bạn có 2 phần thực sự.
1 / Làm thế nào tôi có thể khai báo kích thước không đổi của một mảng bên ngoài mảng?
Bạn có thể sử dụng macro
#define ARRAY_SIZE 10
...
int myArray[ARRAY_SIZE];
hoặc sử dụng hằng số
const int ARRAY_SIZE = 10;
...
int myArray[ARRAY_SIZE];
Nếu bạn đã khởi tạo mảng và bạn cần biết kích thước của nó thì bạn có thể làm:
int myArray[] = {1, 2, 3, 4, 5};
const int ARRAY_SIZE = sizeof(myArray) / sizeof(int);
thứ hai sizeof
là về loại từng phần tử của mảng của bạn, ở đây int
.
2 / Làm thế nào tôi có thể có một mảng có kích thước động (nghĩa là không biết đến thời gian chạy)?
Cho rằng bạn sẽ cần phân bổ động, hoạt động trên Arduino, nhưng thường không được khuyến khích vì điều này có thể khiến "đống" bị phân mảnh.
Bạn có thể làm (cách 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));
}
Hoặc (cách 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];
Để biết thêm về các vấn đề với phân mảnh heap, bạn có thể tham khảo câu hỏi này .