您的问题实际上分为两部分。
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];
有关堆碎片问题的更多信息,可以参考此问题。