数组——它们没那么可怕

有些人可能曾经希望有一种方法可以方便地跟踪您向系统提供的一系列输入。幸运的是,数组是解决这种困境的极好方法,而且它还具有易于使用的优点!

从本质上讲,数组是特定数据类型(如整数)的值的集合或组。但是,不必按名称声明每一个整数,只需声明数组本身;编译器将根据元素在数组中的位置为其分配位置号。要初始化一个数组(即,用初始值声明一个数组),我们使用以下格式:

通用数组初始化
通用数组初始化。

例如,如果要声明一个由5个整数组成的数组,长度为2、4和6为前3个整数,则需要输入:

数组的部分初始化。
数组的部分初始化。

声明数组时,数组中任何未赋值的部分,例如5个数组中的最后两个值,都会被编译器赋值为0。如前所述,数组中的每个值都被分配了一个位置号,数组中的第一个值接收“0”,第二个值接收“1”,以此类推,直到数组中的所有值都被分配了一个连续的位置号。我们可以访问数组中的各个值,通过使用它们的位置号来使用或更改它们。因此,如果我们想让myfirststarray的第三个整数增加10,然后为第三个整数的新值延迟系统,我们将输入:

更改和使用数组中的特定值。
更改和使用数组中的特定值。

虽然我们已经讨论过的单维数组非常有用,但如果我们不讨论多维数组,那就太遗憾了。

在其核心,多维数组是一组一维数组,很像一维数组是一组值。考虑到这一点,您可以将二维数组看作多个(长度相同)的单维数组,这样您就有了一个包含值的二维平面。三维数组将(毫无疑问)添加第三维来创建一个值的立方体(或者,从某种意义上说,一个数组平面)。

三维数组的可视化。
三维数组的可视化凯尔

随着我们继续添加额外的维度,我们开始进入一些有趣的视角。4D阵列可以被认为是一组立方体,而6D阵列可以被认为是立方体的一个立方体。等等。

凯尔的六维数组可视化。
一个六维数组的可视化凯尔

您很少需要大于三个维度的数组,因为随着维度的增加,您开始迅速消耗可用的内存。幸运的是,这可以通过选择微控制器来补救,就像chipKIT Uno32chipKIT uC32它的内存明显更大。

Digilent的chipKIT uC32拥有512K字节的闪存和32K字节的静态ram。
Digilent的chipKIT uC32拥有512K字节的闪存和32K字节的静态RAM。

自然地,当我们开始添加更多维度来创建数组组时,初始化数组的方式将略有变化。与“数组组”主题一致,我们可以用三个由四个元素组成的一维数组初始化一个2D数组:

初始化二维数组。
初始化二维数组。

同样,我们也可以初始化一个三维数组通过添加“层数”作为第一个括号内的元素在数组的声明,与一维数组的“行数”作为第二个括号内的元素和最后一个括号内的元素数量的值在每一个一维数组。一个3D数组的视觉压缩版本可以通过以下方式初始化:

视觉压缩版的3D数组,在每个“层”中显示整个“平面”的值。
视觉压缩版的3D数组,在每个“层”中显示整个“平面”的值。

但是我们能用数组做什么呢?在我看来,你可以用数组做的更有趣的事情之一是把它用作记录设备。一个二维数组可以设置保存两个一维数组:一个数组来记录是否被按下一个按钮,第二个数组记录的时间长度,按钮在每个州举行,以增量器能够将值存储在适当的数字数组中的位置。还可以创建另一个函数来访问和“播放”二维数组中存储的每个值。你可以在YouTube上看到一个记录装置就是这样。

每天都来看看Digilent还做了什么很酷的事情!

关于詹姆斯·科尔文

我最喜欢的事情就是学习新东西。特别是涉及某些技术的事情;电脑组件、有趣的小工具、游戏、编码技术等。我喜欢和我的妻子和两个儿子在一起,也喜欢和朋友们在一起。在我的日常工作中,我管理Digilent论坛和北美支持团队。

查看所有由James Colvin→发布的帖子

对“数组——它们没那么可怕”的8条评论

  1. 这是伟大的!我试着想象一个四维数组,它就像我怀疑的那样,至少我认为。4d数组会像一个常规的1d数组,但每个“盒子”是一个立方体(3d数组)

    1. 是的!这就是它最终的样子。

      当你开始旋转图像并考虑到你必须“放大”才能看到单个3D立方体“盒子”中的一个点时,你就会觉得有点难以理解了。

留下一个回复

您的电子邮件地址将不会被公布。必填字段被标记