reference:language:arrays
差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
reference:language:arrays [2017/04/07 10:03] – 外部编辑 127.0.0.1 | reference:language:arrays [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== Arrays (数组) ====== | ||
+ | |||
+ | 数组是一种可访问的变量的集合。ocrobot的数组是基于C语言的,因此这会变得很复杂,但使用简单的数组是比较简单的。 | ||
+ | |||
+ | ===== 创建(声明)一个数组 ===== | ||
+ | |||
+ | |||
+ | 下面的方法都可以用来创建(声明)数组。 | ||
+ | <code cpp> | ||
+ | myInts [6]; | ||
+ | myPins [] = {2,4,8,3,6}; | ||
+ | mySensVals [6] = {2,4,-8,3,2}; | ||
+ | char message[6] = " | ||
+ | </ | ||
+ | 你声明一个未初始化数组,例如myPins。 | ||
+ | |||
+ | 在myPins中,我们声明了一个没有明确大小的数组。编译器将会计算元素的大小,并创建一个适当大小的数组。 | ||
+ | |||
+ | 当然,你也可以初始化数组的大小,例如在mySensVals中。请注意,当声明一个char类型的数组时,你初始化的大小必须大于元素的个数,以容纳所需的空字符。 | ||
+ | |||
+ | ===== 访问数组 ===== | ||
+ | |||
+ | |||
+ | 数组是从零开始索引的,也就说,上面所提到的数组初始化,数组第一个元素是为索引0,因此: | ||
+ | |||
+ | mySensVals [0] == 2,mySensVals [1] == 4, | ||
+ | 依此类推 。 | ||
+ | |||
+ | 这也意味着,在包含十个元素的数组中,索引九是最后一个元素。因此, | ||
+ | <code cpp> | ||
+ | int myArray[10] = {9, | ||
+ | // myArray[9]的数值为11 | ||
+ | // myArray[10],该索引是无效的,它将会是任意的随机信息(内存地址) | ||
+ | </ | ||
+ | |||
+ | 出于这个原因,你在访问数组应该小心。若访问的数据超出数组的末尾(即索引数大于你声明的数组的大小- 1),则将从其他内存中读取数据。从这些地方读取的数据,除了产生无效的数据外,没有任何作用。向随机存储器中写入数据绝对是一个坏主意,通常会导致不愉快的结果,如导致系统崩溃或程序故障。要排查这样的错误是也是一件难事。 | ||
+ | 不同于Basic或JAVA,C语言编译器不会检查你访问的数组是否大于你声明的数组。 | ||
+ | |||
+ | ===== 指定一个数组的值: ===== | ||
+ | |||
+ | <code cpp> | ||
+ | mySensVals [0] = 10; | ||
+ | </ | ||
+ | ===== 从数组中访问一个值: ===== | ||
+ | |||
+ | <code cpp> | ||
+ | X = mySensVals [4]; | ||
+ | </ | ||
+ | |||
+ | ===== 数组和循环 ===== | ||
+ | |||
+ | |||
+ | 数组往往在for循环中进行操作,循环计数器可用于访问每个数组元素。例如,将数组中的元素通过串口打印,你可以这样做: | ||
+ | < | ||
+ | int i; | ||
+ | for (i = 0; i < 5; i = i + 1) { | ||
+ | Serial.println(myPins[i]); | ||
+ | } | ||
+ | </ | ||
+ | ===== 例子 ===== | ||
+ | |||
+ | |||
+ | 如果你需要一个演示数组的完整程序,请参考Knight Rider exampel。 | ||
+ | |||
+ | ===== 二维数组 ===== | ||
+ | |||
+ | 一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量。多维数组可由二维数组类推而得到。 | ||
+ | ===== 二维数组的定义 ===== | ||
+ | 二维数组定义的一般形式是: | ||
+ | 类型说明符 数组名[常量表达式1][常量表达式2] | ||
+ | 其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。 | ||
+ | <code cpp> | ||
+ | int a[3][4]; | ||
+ | / | ||
+ | a[0][0], a[0][1], a[0][2], a[0][3] | ||
+ | a[1][0], a[1][1], a[1][2], a[1][3] | ||
+ | a[2][0], a[2][1], a[2][2], a[2][3]*/ | ||
+ | </ | ||