数组

数组是一群变数的集合,每个变数可以利用特定的索引值来存取。86Duino 的数组与 C 语言相同,数组的使用可以很复杂也可以很简单。

宣告数组

以下是有效宣告数组的方法。

  int myInts[6];
  int myPins[] = {2, 4, 8, 3, 6};
  int mySensVals[6] = {2, 4, -8, 3, 2};
  char message[6] = "hello";

你可以宣告一个数组而不初始化,例如 myInts

第 2 行在宣告 myPins 数组时不给明确的大小,但编译器将会自动计算元素数量并且创建一个适当大小的数组。

你也可以同时初始化数组内容以及数组大小,像是 mySensVals;注意宣告 char 数组时,需要初始化一个值给数组让它存放空字元。

存取数组

数组索引从 0 开始,第一个元素的索引值是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] 10 是未宣告的位置,内容是不可预期的。

有上面的案例提醒我们必须小心地存取数组,存取超出宣告范围 (使用大于宣告大小减 1 的索引值) 的元素时,会读到用于其他用途的记忆体位址。读取到这些位置很可能会产生不预期的结果。而撰写一个随机记忆体位置存取是很不明智的行为,可能会造成整个程式崩溃或故障,而且非常难除错。

不像 Basic 或者 Java,C 的编译器在使用数组时不会去检查索引值是否合法。

指派数值给数组元素:


mySensVals[0] = 10;

从数组元素中取回数值:


x = mySensVals[4];

数组与 for 回圈

数组常常藉由 for 回圈来操作,利用回圈的计数器当做索引值存取数组内每个元素。举个例子,若要印出所有数组元素将像下面的程式码一样:

int i;
for (i = 0; i < 5; i = i + 1) {
  Serial.println(myPins[i]);
}

范例

一个较详细的数组使用范例可以参考 Arduino 相关教学中的 Knight Rider 范例

See also

Variable Declaration


语法参考主页面

本页由热血青年 LBU 译自英文版。

The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.