数组
[数据类型]
描述
数组是一组通过索引号访问的变量集合。数组属于构造数据类型,一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。在 Arduino 草图(使用 C++ 编程语言编写)中,数组可能较为复杂,但使用简单数组相对直接。
创建(声明)数组
以下所有方法都是创建(声明)数组的有效方式。
// 声明一个给定长度的数组,但不初始化值:
int myInts[6];
// 声明一个数组,不显式选择大小(编译器计算元素数量并创建适当大小的数组):
int myPins[] = {2, 4, 8, 3, 6, 4};
// 声明一个给定长度的数组并初始化其值:
int mySensVals[5] = {2, 4, -8, 3, 2};
// 声明一个类型为char的数组时,需要使其长度多一个元素,以容纳所需的空终止字符:
char message[6] = "hello";
访问数组
数组是从零开始索引的,即引用上面的初始化的数组,数组的第一个元素位于索引 0,因此
mySensVals[0] == 2
, mySensVals[1] == 4
,以此类推。
这也意味着在包含十个元素的数组中,索引 9 是最后一个元素。因此:
int myArray[10]={9, 3, 2, 4, 3, 2, 7, 8, 9, 11};
// myArray[9] 值是 11
// myArray[10] 是无效的,值是随机的(其他内存地址)
因此,在访问数组时应小心。访问数组末尾之后(使用大于已声明数组大小 - 1 的索引号)是从用于其他目的的内存中读取。从这些位置读取可能不会产生太多结果,只会产生无效数据。向随机内存位置写入肯定是一个坏主意,通常会导致不良结果,如崩溃或程序故障。这也可能是一个难以追踪的 bug。
与 BASIC 或 JAVA 不同,C++ 编译器不会检查数组访问是否越界。
给数组赋值
mySensVals[0] = 10;
从数组中获取值
x = mySensVals[4];
数组与 FOR 循环
数组通常在 for 循环中进行操作,其中循环计数器用作每个数组元素的索引。例如,要在串行端口上打印数组的元素,您可以这样做:
for (byte i = 0; i < 5; i = i + 1) {
Serial.println(myPins[i]);
}
示例代码
要查看使用数组的完整程序示例,请参见(内置示例)中的(如何使用数组示例)。
扩展阅读