用户工具

站点工具


reference:language:arrays

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

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