阡陌 发表于 2024-3-10 19:28:09

数组


**数组**

[数据类型]



## 描述

数组是一组通过索引号访问的变量集合。数组属于构造数据类型,一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。在 Arduino 草图(使用 C++ 编程语言编写)中,数组可能较为复杂,但使用简单数组相对直接。



## 创建(声明)数组

以下所有方法都是创建(声明)数组的有效方式。

```c
// 声明一个给定长度的数组,但不初始化值:
int myInts;

// 声明一个数组,不显式选择大小(编译器计算元素数量并创建适当大小的数组):
int myPins[] = {2, 4, 8, 3, 6, 4};

// 声明一个给定长度的数组并初始化其值:
int mySensVals = {2, 4, -8, 3, 2};

// 声明一个类型为char的数组时,需要使其长度多一个元素,以容纳所需的空终止字符:
char message = "hello";
```



## 访问数组

数组是从零开始索引的,即引用上面的初始化的数组,数组的第一个元素位于索引 0,因此

`mySensVals == 2`, `mySensVals == 4`,以此类推。

这也意味着在包含十个元素的数组中,索引 9 是最后一个元素。因此:

```c
int myArray={9, 3, 2, 4, 3, 2, 7, 8, 9, 11};
// myArray 值是 11
// myArray 是无效的,值是随机的(其他内存地址)
```

因此,在访问数组时应小心。访问数组末尾之后(使用大于已声明数组大小 - 1 的索引号)是从用于其他目的的内存中读取。从这些位置读取可能不会产生太多结果,只会产生无效数据。向随机内存位置写入肯定是一个坏主意,通常会导致不良结果,如崩溃或程序故障。这也可能是一个难以追踪的 bug。

与 BASIC 或JAVA 不同,C++ 编译器不会检查数组访问是否越界。



## 给数组赋值

```c
mySensVals = 10;
```



## 从数组中获取值

```c
x = mySensVals;
```



## 数组与 FOR 循环

数组通常在 for 循环中进行操作,其中循环计数器用作每个数组元素的索引。例如,要在串行端口上打印数组的元素,您可以这样做:

```c
for (byte i = 0; i < 5; i = i + 1) {
    Serial.println(myPins);
}
```



## 示例代码

要查看使用数组的完整程序示例,请参见(内置示例)中的(如何使用数组示例)。



## 扩展阅读

- (https://www.mculoop.com/thread-240-1-1.html)



页: [1]
查看完整版本: 数组