0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何创建和使用多维数组

454398 ? 来源:网络整理 ? 作者:网络整理 ? 2019-11-26 17:45 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

步骤1:我们需要什么要拥有

要最终以可见的方式显示二维数组(我们稍后将讨论3维数组选项),我们将创建一个记录设备使用与我的一维数组Instructable相同的材料。这些材料是:

3个面包板按钮(记录按钮,记录其按下情况的按钮和播放按钮)

3个LED(指示每个按钮何时已按下)

6个小电阻(我将使用220欧姆)

Digilent的chipKIT Uno32(运行代码的微控制器

跳线(

面包板(未显示)

步骤2:关于多维数组的注意事项

一个二维数组,或与此相关的任何二维数组,本质上是多个单维数组。多维数组的好处是它可以在一个代码段中直观地将相关数组分组在一起。这样,程序员不必从多个来源调用信息,而是可以指定一个来源并从那里找到他们的信息。

声明一个维数组时,实际上就是在创建一行值。对于每个更高的维度,您都可以在值行中添加(不信不信)另一个维度。二维数组将使您的线成为值的平面,而三维数组将使值的平面成为值的立方体。

再往前走,您就会开始涉入有趣的观点。可以将一个四维数组视为具有三个多维数据集的一行。六个维度的数组可以认为是一个立方体。等等。

不过,作为免责声明,您在编程中几乎不需要3维数组以外的任何东西。当然,更高维度的数组可以用作[国家/地区] [州] [县] [镇] [家庭] [人]或某些销售目的的目录/数据库,但是(在我看来)这将更易于在多个环境中导航,较小尺寸的数组,并且其中一些数组需要大量的内存。

步骤3:声明和初始化二维数组

但是让我们进入实际创建这些数组的更实际的部分。添加到数组中的每个维度都会在第一组[元素]的前面添加一个额外的[元素],该元素指定每个单个维度数组的长度。

因此,对于二维数组,您可以将声明您需要一定数量的具有一定长度的单维数组。例如,如果我想声明一个包含3个一维数组(每个数组包含4个元素)的2D数组,我将输入:

int myFirst2DArray [3] [4];

这很好创建我们想要的数组,但在所有12个点中都用零填充。要使用某些值初始化它,而不必以后再单独分配它们,我们可以改为输入:

int myFirst2DArray [3] [4] =

{

{1,2,3,4 },

{5,6,7,8},

{9,10,11,12}

};

您可以安排它,使其仅在一行上相反,但这可以使我从视觉上确保我拥有所有想要的值。

与单维数组一样,我们可以通过说明各个方向上的哪个元素来访问单个值我们要访问。例如,要获取第二个数组的一维数组的第三个值,我们输入:

int x = myFirst2DArray [1] [2];

步骤4:声明和初始化高维数组

同样,当您向单个维数组添加更多维时,在声明的前面会添加更多[elements]阵列。因此,对于一个具有三层,四行,每行中具有两个元素的三维单维数组的三维数组,我们可以通过键入以下内容对其进行初始化:

int myFirst3DArray [3] [4] [2] =

{

{{10,11},{12,13},{14,15},{16,17}},

{{18,19},{20, 21},{22、23},{24、25}},

{{26,27},{28、29},{30、31},{32、33}}

};

步骤5:关于多维数组的更多信息

请注意,我们可以将数组扩展到更多通过以下方式帮助说明这三个维度:

{//整个数组

{//多维数据集的第一层

{10,11},//值的第一行/行图层

{12,13}等,等等//图层中的其他值行

},//多维数据集第一层的末端

{//多维数据集的第二层

{18,19}等,等等//值行

}//第二层的末尾

等,等等//第三层和值

}//整个末尾数组

。..但是那将使步骤l不必要的大而繁琐(显然Instructables忽略了代码和注释之间的某些空格),因此在一行的特定层中初始化所有值的更为精简的版本代替了。通过这种嵌套的{}样式,您可以创建多维数组。

请注意,在初始化数组时,您不会为高阶维提供值,而只是为单维数组提供值。否则,您将尝试以某种方式为编译器不知道要处理的数组赋予额外的值。

步骤6:实践中的二维数组

让我们建立电路,以便我们可以测试二维阵列。如果您碰巧已经从我的Instructionable一维数组中设置了此电路,请随时跳过该电路结构。

将面包板上的负电源导轨连接到标有“芯片组Uno32上的“ GND”。然后,从Uno32上的3.3V电源引脚到面包板上的正极电源线连接一根跳线。

现在,将三个按钮中的每个按钮放置在面包板上,使每个按钮跨过面包板中间的山谷。使用电阻器之一将每个按钮的一只脚连接到负电源轨。将支脚与接地的导线连接到山谷的同一侧,并连接至正极电源线。

步骤7:设置电路-LED和数字信号

对于电路的视觉部分(包括LED,无论是否相信),在每个按钮旁边放置一个LED。在每个LED的阴极侧与负电源轨之间连接一个220 Ohm的电阻

虽然看起来不错,但是如果我们无法从电路中发出或接收任何信号,那对我们没有好处。要解决此问题,请从每个LED的阳极侧到Uno32上自己的数字引脚的跳线,以及从每个按钮的接地脚到Uno32上他们自己的数字引脚的跳线。我将引脚5、7和9用于按钮,将引脚31、33和35用于LED。

步骤8:二维记录代码

根据记录的性质,我们和微控制器都无法确定在实际停止记录之前记录将持续多长时间。因此,我们将猜测要存储最长的记录,阵列必须有多大。由于Uno32具有32位处理器,因此我们不必担心整数的大小限制,除非您计划在录制期间一次按住(或不按住)按钮超过24天。

假设是这种情况,我们或至少我将记录阵列的大小设置为两组,每组50个元素,因为我不打算记录超过25次的按钮按下(其中一个用于按下按钮)并熄灭,一个按下按钮,然后点亮)。第二组50个元素跟踪按钮的打开或关闭状态,这样您就不仅可以记录按钮被按下(或不按下)的时间长度,还可以猜测按钮在开始时是否被按下。录音。您可以在下面的文本文件中下载用于Uno32的代码。如果尚未安装,则需要免费的MPIDE软件对Uno32进行编程。

可以免费签出二维记录视频;您可能会注意到,它看起来与单阵列演示视频的视频看起来非常相似,但这是因为二维数组本质上是一组单维数组,因此两组代码在功能上是相同的。

第9步:您提到了3维数组吗?

确实做到了。但这也与多维数组的固有局限性有关。此限制以内存形式出现。在创建代码的大部分时间里,我都会将变量放在“堆栈”(编程中的内存对象)上,假定它们是局部变量,或者创建全局变量,这些变量存储在称为“ .data”的另一种内存类型中。 p》

我不会尝试解释编程中内存的详细信息/机制(主要是因为我不太了解它,但是您可以在此处了解更多信息),而是从我的理解中了解在Uno32上创建巨型三维数组作为一种乘法表/多维数据集,我遇到了堆栈溢出问题,这意味着我试图在内存中放置超出空间的东西,因此编译器将多余的东西放在其他地方不应混淆的内存位置,导致在我尝试运行该程序时该程序崩溃。我似乎无法说服该程序,动态分配的内存也应该允许我有更多的内存空间。

基本上,我内存不足,无法找到一种制作3D阵列的方法工作。

我最终确实做了一个小的2D数组工作(60 x 60),但是我们只介绍了2D数组的一个例子,最后,您可以在代码中键入乘法问题并得到答案。无需先创建答案数组。这是学习新事物和实用主义之间的分界线。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    243

    文章

    24001

    浏览量

    677195
  • 电阻
    +关注

    关注

    87

    文章

    5664

    浏览量

    175919
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    迅为RK3576开发板NPUrknn-toolkit2环境搭建和使用docker环境安装

    迅为RK3576开发板NPUrknn-toolkit2环境搭建和使用docker环境安装
    的头像 发表于 06-18 15:22 ?653次阅读
    迅为RK3576开发板NPUrknn-toolkit2环境搭<b class='flag-5'>建和</b>使用docker环境安装

    Nordic 54L15开发环境搭建和开发文档谁知道,谢谢

    Nordic 54L15开发环境搭建和开发文档谁知道,谢谢
    发表于 03-10 15:34

    SOLIDWORKS 2025教育版支持多部件装配体的创建和管理

    SOLIDWORKS作为一款广泛使用的三维CAD设计软件,在教育领域同样占据了重要地位。SOLIDWORKS 2025教育版不仅提供了强大的设计工具和功能,还大大地支持了多部件装配体的创建和管理,为教育工作者和学生提供了一个有效、直观的设计平台。
    的头像 发表于 02-10 14:45 ?581次阅读
    SOLIDWORKS 2025教育版支持多部件装配体的<b class='flag-5'>创建和</b>管理

    AN-1420:利用数字锁相环(DPLL)实现相位增建和无中断切换

    电子发烧友网站提供《AN-1420:利用数字锁相环(DPLL)实现相位增建和无中断切换.pdf》资料免费下载
    发表于 01-13 14:07 ?0次下载
    AN-1420:利用数字锁相环(DPLL)实现相位增<b class='flag-5'>建和</b>无中断切换

    数组的下标为什么可以是负数

    最近有同学发来这样一段代码,并提出一个问题,数组的下标为什么可以是负数? ? ? #include int main(){ const char *s = "helloworld"; const
    的头像 发表于 12-20 11:18 ?582次阅读

    RK3568国产处理器 + TensorFlow框架的张量创建实验案例分享

    一、实验目的 本节视频的目的是了解张量定义、了解张量的表示形式、并学习基于TensorFlow框架的张量创建方法。 二、实验原理. 张量定义 1、张量是多维数组,这个定义常见于各种人工智能软件。 2
    发表于 12-03 14:43

    数组名之间可以直接赋值吗

    数组之间的赋值能不能直接使用等于号?比如这样的代码。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
    的头像 发表于 11-26 11:23 ?702次阅读

    指针数组和二维数组有没有区别

    指针数组和二维数组有没有区别?比如这样的两个代码。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][6
    的头像 发表于 11-24 11:12 ?593次阅读

    C语言数组应用计算机导论A第6讲:数组

    C语言数组应用计算机导论A第6讲:数组
    发表于 11-20 15:33 ?1次下载

    多维科技推出新型TMR传感器芯片

    专注于隧道磁阻(TMR)技术的磁传感器领先制造商江苏多维科技有限公司 (MultiDimension Technology Co., Ltd., 英文简称“MDT”,以下简称“多维科技”)在德国
    的头像 发表于 11-18 11:09 ?2272次阅读

    解读版|Air780E软件中C语言内存数组的神秘面纱!

    今天我们来揭开Air780E 软件中 C 语言内存数组的神秘面纱,希望有所收获。
    的头像 发表于 11-17 10:00 ?734次阅读
    解读版|Air780E软件中C语言内存<b class='flag-5'>数组</b>的神秘面纱!

    Altium Designer 18~24创建、打开工程闪退

    在使用AD进行工程创建和打开工程时出现闪退的现象,使用AD18打开PCB时报错(见下图),使用其余版本则是直接闪退。请问哪位大佬遇见过类似情况,请指点一下!
    发表于 11-10 15:26

    昱感微“多维像素”超级摄像头产品方案发布!

    昱感微“多维像素”超级摄像头采用最前沿的多传感器器前融合技术,将可见光摄像头、红外摄像头、4D毫米波雷达/激光雷达的探测数据在前端(数据获取时)融合,并将各传感器的探测数据“坐标统一、时序对齐
    的头像 发表于 11-06 10:49 ?946次阅读
    昱感微“<b class='flag-5'>多维</b>像素”超级摄像头产品方案发布!

    多维表格属于低代码平台吗?

    Teable多维表格数据库是一款功能强大的云端数据库和协作工具,结合了电子表格的灵活性和数据库的强大功能,适用企业内部项目管理 数据收集与整理 内容管理与创意协作 客户关系管理 项目跟踪与分析 IT与工程管理等
    的头像 发表于 10-17 14:22 ?645次阅读

    labview字符串数组转化为数值数组

    在LabVIEW中,将字符串数组转换为数值数组是一项常见的任务,尤其是在处理数据采集、信号处理或用户输入时。 1. 理解LabVIEW的数据类型 在开始之前,了解LabVIEW中的数据类型是非
    的头像 发表于 09-04 17:47 ?6014次阅读