array 数组

说明

数组是一种可通过索引号访问的同类型变量集合。

创建数组

下面的方法都可以用来创建(声明)数组。

int Ints[6];
int P[] = {2, 4, 8, 3, 6};
int SensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";

在以上示例中:
Ints数组是一个在声明时没有初始化数据的数组。
P数组在声明时没有明确大小。Arduino编译器将会计算该数组所包含的元素数量,并将适当大小的内存空间分配给该数组。
当然,你也可以明确告知Arduino你所创建的数组大小,SensVals就是一个例子。
请注意,当初始化一个char类型的数组时,你需要多分配一个元素空间给该数组。这么做的原因是为了字符数组有足够的空间容纳末尾的终止符。如上面例子中的message数组中包含的元素为hello五个英文字母,但是我们在初始化时必须给该数组6个元素空间。额外的元素空间是为了存储字符结尾的终止符。

使用数组

我们知道,要想把数据放入内存,必须先要分配内存空间。放入4个整数,就得分配4个int类型的内存空间:

int a[4];

这样,就在内存中分配了4个int类型的内存空间,并为它们起了一个名字,叫a
我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length),例如int a[4];就定义了一个长度为4的整型数组,名字是a。

数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index)。使用数组元素时,指明下标即可,形式为:

arrayName[index]

arrayName 为数组名称,index 为下标。例如,a[0] 表示第0个元素,a[3] 表示第3个元素

需要注意的是:
1) 数组中每个元素的数据类型必须相同,对于int a[4];,每个元素都必须为 int。

2) 数组长度 length 最好是整数或者常量表达式,例如 10、20*4 等,这样在所有编译器下都能运行通过;如果 length 中包含了变量,例如 n、4*m 等,在某些编译器下就会报错。

3) 访问数组元素时,下标的取值范围为 0 ≤ index < length,过大或过小都会越界,导致数组溢出,发生不可预测的情况,请大家务必要引起注意。

数组的初始化

我们可以在定义数组的同时赋值:

int a[4] = {20, 345, 700, 22};

{ }中的值即为各元素的初值,各值之间用,间隔。

对数组赋初值需要注意以下几点:
1) 可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:

int a[10]={12, 19, 22 , 993, 344};

表示只给 a[0] ~ a[4] 这5个元素赋值,而后面5个元素自动赋0值。

当赋值的元素少于数组总体元素的时候,剩余的元素自动初始化为 0:对于short、int、long类型数据,就是整数0;对于char类型数据,就是字符 ‘\0’;对于float、double类型数据,就是小数0.0。

我们可以通过下面的形式将数组的所有元素初始化为 0:

int a[10] = {0};
char c[10] = {0};
float f[10] = {0};

由于剩余的元素会自动初始化为0,所以只需要给第0个元素赋0值即可。

示例

运行结果: