0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何創(chuàng)建和使用多維數(shù)組

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-26 17:45 ? 次閱讀

步驟1:我們需要什么要擁有

要最終以可見的方式顯示二維數(shù)組(我們稍后將討論3維數(shù)組選項(xiàng)),我們將創(chuàng)建一個(gè)記錄設(shè)備使用與我的一維數(shù)組Instructable相同的材料。這些材料是:

3個(gè)面包板按鈕(記錄按鈕,記錄其按下情況的按鈕和播放按鈕)

3個(gè)LED(指示每個(gè)按鈕何時(shí)已按下)

6個(gè)小電阻(我將使用220歐姆)

Digilent的chipKIT Uno32(運(yùn)行代碼的微控制器

跳線(

面包板(未顯示)

步驟2:關(guān)于多維數(shù)組的注意事項(xiàng)

一個(gè)二維數(shù)組,或與此相關(guān)的任何二維數(shù)組,本質(zhì)上是多個(gè)單維數(shù)組。多維數(shù)組的好處是它可以在一個(gè)代碼段中直觀地將相關(guān)數(shù)組分組在一起。這樣,程序員不必從多個(gè)來源調(diào)用信息,而是可以指定一個(gè)來源并從那里找到他們的信息。

聲明一個(gè)維數(shù)組時(shí),實(shí)際上就是在創(chuàng)建一行值。對(duì)于每個(gè)更高的維度,您都可以在值行中添加(不信不信)另一個(gè)維度。二維數(shù)組將使您的線成為值的平面,而三維數(shù)組將使值的平面成為值的立方體。

再往前走,您就會(huì)開始涉入有趣的觀點(diǎn)??梢詫⒁粋€(gè)四維數(shù)組視為具有三個(gè)多維數(shù)據(jù)集的一行。六個(gè)維度的數(shù)組可以認(rèn)為是一個(gè)立方體。等等。

不過,作為免責(zé)聲明,您在編程中幾乎不需要3維數(shù)組以外的任何東西。當(dāng)然,更高維度的數(shù)組可以用作[國(guó)家/地區(qū)] [州] [縣] [鎮(zhèn)] [家庭] [人]或某些銷售目的的目錄/數(shù)據(jù)庫(kù),但是(在我看來)這將更易于在多個(gè)環(huán)境中導(dǎo)航,較小尺寸的數(shù)組,并且其中一些數(shù)組需要大量的內(nèi)存。

步驟3:聲明和初始化二維數(shù)組

但是讓我們進(jìn)入實(shí)際創(chuàng)建這些數(shù)組的更實(shí)際的部分。添加到數(shù)組中的每個(gè)維度都會(huì)在第一組[元素]的前面添加一個(gè)額外的[元素],該元素指定每個(gè)單個(gè)維度數(shù)組的長(zhǎng)度。

因此,對(duì)于二維數(shù)組,您可以將聲明您需要一定數(shù)量的具有一定長(zhǎng)度的單維數(shù)組。例如,如果我想聲明一個(gè)包含3個(gè)一維數(shù)組(每個(gè)數(shù)組包含4個(gè)元素)的2D數(shù)組,我將輸入:

int myFirst2DArray [3] [4];

這很好創(chuàng)建我們想要的數(shù)組,但在所有12個(gè)點(diǎn)中都用零填充。要使用某些值初始化它,而不必以后再單獨(dú)分配它們,我們可以改為輸入:

int myFirst2DArray [3] [4] =

{

{1,2,3,4 },

{5,6,7,8},

{9,10,11,12}

};

您可以安排它,使其僅在一行上相反,但這可以使我從視覺上確保我擁有所有想要的值。

與單維數(shù)組一樣,我們可以通過說明各個(gè)方向上的哪個(gè)元素來訪問單個(gè)值我們要訪問。例如,要獲取第二個(gè)數(shù)組的一維數(shù)組的第三個(gè)值,我們輸入:

int x = myFirst2DArray [1] [2];

步驟4:聲明和初始化高維數(shù)組

同樣,當(dāng)您向單個(gè)維數(shù)組添加更多維時(shí),在聲明的前面會(huì)添加更多[elements]陣列。因此,對(duì)于一個(gè)具有三層,四行,每行中具有兩個(gè)元素的三維單維數(shù)組的三維數(shù)組,我們可以通過鍵入以下內(nèi)容對(duì)其進(jìn)行初始化:

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:關(guān)于多維數(shù)組的更多信息

請(qǐng)注意,我們可以將數(shù)組擴(kuò)展到更多通過以下方式幫助說明這三個(gè)維度:

{//整個(gè)數(shù)組

{//多維數(shù)據(jù)集的第一層

{10,11},//值的第一行/行圖層

{12,13}等,等等//圖層中的其他值行

},//多維數(shù)據(jù)集第一層的末端

{//多維數(shù)據(jù)集的第二層

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

}//第二層的末尾

等,等等//第三層和值

}//整個(gè)末尾數(shù)組

。..但是那將使步驟l不必要的大而繁瑣(顯然Instructables忽略了代碼和注釋之間的某些空格),因此在一行的特定層中初始化所有值的更為精簡(jiǎn)的版本代替了。通過這種嵌套的{}樣式,您可以創(chuàng)建多維數(shù)組。

請(qǐng)注意,在初始化數(shù)組時(shí),您不會(huì)為高階維提供值,而只是為單維數(shù)組提供值。否則,您將嘗試以某種方式為編譯器不知道要處理的數(shù)組賦予額外的值。

步驟6:實(shí)踐中的二維數(shù)組

讓我們建立電路,以便我們可以測(cè)試二維陣列。如果您碰巧已經(jīng)從我的Instructionable一維數(shù)組中設(shè)置了此電路,請(qǐng)隨時(shí)跳過該電路結(jié)構(gòu)。

將面包板上的負(fù)電源導(dǎo)軌連接到標(biāo)有“芯片組Uno32上的“ GND”。然后,從Uno32上的3.3V電源引腳到面包板上的正極電源線連接一根跳線。

現(xiàn)在,將三個(gè)按鈕中的每個(gè)按鈕放置在面包板上,使每個(gè)按鈕跨過面包板中間的山谷。使用電阻器之一將每個(gè)按鈕的一只腳連接到負(fù)電源軌。將支腳與接地的導(dǎo)線連接到山谷的同一側(cè),并連接至正極電源線。

步驟7:設(shè)置電路-LED和數(shù)字信號(hào)

對(duì)于電路的視覺部分(包括LED,無論是否相信),在每個(gè)按鈕旁邊放置一個(gè)LED。在每個(gè)LED的陰極側(cè)與負(fù)電源軌之間連接一個(gè)220 Ohm的電阻

雖然看起來不錯(cuò),但是如果我們無法從電路中發(fā)出或接收任何信號(hào),那對(duì)我們沒有好處。要解決此問題,請(qǐng)從每個(gè)LED的陽(yáng)極側(cè)到Uno32上自己的數(shù)字引腳的跳線,以及從每個(gè)按鈕的接地腳到Uno32上他們自己的數(shù)字引腳的跳線。我將引腳5、7和9用于按鈕,將引腳31、33和35用于LED。

步驟8:二維記錄代碼

根據(jù)記錄的性質(zhì),我們和微控制器都無法確定在實(shí)際停止記錄之前記錄將持續(xù)多長(zhǎng)時(shí)間。因此,我們將猜測(cè)要存儲(chǔ)最長(zhǎng)的記錄,陣列必須有多大。由于Uno32具有32位處理器,因此我們不必?fù)?dān)心整數(shù)的大小限制,除非您計(jì)劃在錄制期間一次按?。ɑ虿话醋。┌粹o超過24天。

假設(shè)是這種情況,我們或至少我將記錄陣列的大小設(shè)置為兩組,每組50個(gè)元素,因?yàn)槲也淮蛩阌涗洺^25次的按鈕按下(其中一個(gè)用于按下按鈕)并熄滅,一個(gè)按下按鈕,然后點(diǎn)亮)。第二組50個(gè)元素跟蹤按鈕的打開或關(guān)閉狀態(tài),這樣您就不僅可以記錄按鈕被按下(或不按下)的時(shí)間長(zhǎng)度,還可以猜測(cè)按鈕在開始時(shí)是否被按下。錄音。您可以在下面的文本文件中下載用于Uno32的代碼。如果尚未安裝,則需要免費(fèi)的MPIDE軟件對(duì)Uno32進(jìn)行編程。

可以免費(fèi)簽出二維記錄視頻;您可能會(huì)注意到,它看起來與單陣列演示視頻的視頻看起來非常相似,但這是因?yàn)槎S數(shù)組本質(zhì)上是一組單維數(shù)組,因此兩組代碼在功能上是相同的。

第9步:您提到了3維數(shù)組嗎?

確實(shí)做到了。但這也與多維數(shù)組的固有局限性有關(guān)。此限制以內(nèi)存形式出現(xiàn)。在創(chuàng)建代碼的大部分時(shí)間里,我都會(huì)將變量放在“堆?!保ň幊讨械膬?nèi)存對(duì)象)上,假定它們是局部變量,或者創(chuàng)建全局變量,這些變量存儲(chǔ)在稱為“ .data”的另一種內(nèi)存類型中。 p》

我不會(huì)嘗試解釋編程中內(nèi)存的詳細(xì)信息/機(jī)制(主要是因?yàn)槲也惶私馑?,但是您可以在此處了解更多信息),而是從我的理解中了解在Uno32上創(chuàng)建巨型三維數(shù)組作為一種乘法表/多維數(shù)據(jù)集,我遇到了堆棧溢出問題,這意味著我試圖在內(nèi)存中放置超出空間的東西,因此編譯器將多余的東西放在其他地方不應(yīng)混淆的內(nèi)存位置,導(dǎo)致在我嘗試運(yùn)行該程序時(shí)該程序崩潰。我似乎無法說服該程序,動(dòng)態(tài)分配的內(nèi)存也應(yīng)該允許我有更多的內(nèi)存空間。

基本上,我內(nèi)存不足,無法找到一種制作3D陣列的方法工作。

我最終確實(shí)做了一個(gè)小的2D數(shù)組工作(60 x 60),但是我們只介紹了2D數(shù)組的一個(gè)例子,最后,您可以在代碼中鍵入乘法問題并得到答案。無需先創(chuàng)建答案數(shù)組。這是學(xué)習(xí)新事物和實(shí)用主義之間的分界線。

責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23286

    瀏覽量

    661110
  • 電阻
    +關(guān)注

    關(guān)注

    86

    文章

    5519

    瀏覽量

    172104
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RK3568國(guó)產(chǎn)處理器 + TensorFlow框架的張量創(chuàng)建實(shí)驗(yàn)案例分享

    一、實(shí)驗(yàn)?zāi)康?本節(jié)視頻的目的是了解張量定義、了解張量的表示形式、并學(xué)習(xí)基于TensorFlow框架的張量創(chuàng)建方法。 二、實(shí)驗(yàn)原理. 張量定義 1、張量是多維數(shù)組,這個(gè)定義常見于各種人工智能軟件。 2
    發(fā)表于 12-03 14:43

    指針數(shù)組和二維數(shù)組有沒有區(qū)別

    指針數(shù)組和二維數(shù)組有沒有區(qū)別?比如這樣的兩個(gè)代碼。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][6
    的頭像 發(fā)表于 11-24 11:12 ?158次閱讀

    C語(yǔ)言數(shù)組應(yīng)用計(jì)算機(jī)導(dǎo)論A第6講:數(shù)組

    C語(yǔ)言數(shù)組應(yīng)用計(jì)算機(jī)導(dǎo)論A第6講:數(shù)組
    發(fā)表于 11-20 15:33 ?0次下載

    Altium Designer 18~24創(chuàng)建、打開工程閃退

    在使用AD進(jìn)行工程創(chuàng)建和打開工程時(shí)出現(xiàn)閃退的現(xiàn)象,使用AD18打開PCB時(shí)報(bào)錯(cuò)(見下圖),使用其余版本則是直接閃退。請(qǐng)問哪位大佬遇見過類似情況,請(qǐng)指點(diǎn)一下!
    發(fā)表于 11-10 15:26

    labview字符串數(shù)組轉(zhuǎn)化為數(shù)值數(shù)組

    在LabVIEW中,將字符串數(shù)組轉(zhuǎn)換為數(shù)值數(shù)組是一項(xiàng)常見的任務(wù),尤其是在處理數(shù)據(jù)采集、信號(hào)處理或用戶輸入時(shí)。 1. 理解LabVIEW的數(shù)據(jù)類型 在開始之前,了解LabVIEW中的數(shù)據(jù)類型是非
    的頭像 發(fā)表于 09-04 17:47 ?2399次閱讀

    在UART回調(diào)函數(shù)中創(chuàng)建一個(gè)EP0的INT端輸出數(shù)組,構(gòu)建輸出數(shù)組的時(shí)候報(bào)錯(cuò),為什么?

    我想請(qǐng)問一下什么情況會(huì)出現(xiàn)這個(gè)錯(cuò)誤呢? 我的代碼里是這樣的,在UART回調(diào)函數(shù)中創(chuàng)建一個(gè)EP0的INT端輸出數(shù)組,然后將UART里面的數(shù)據(jù)通過EP0的IN端推出?,F(xiàn)在這個(gè)構(gòu)建輸出數(shù)組的時(shí)候報(bào)錯(cuò) 串口DEbug回
    發(fā)表于 05-23 07:06

    HarmonyOS開發(fā)案例:【Stage模型下Ability的創(chuàng)建和使用】

    基于Stage模型,對(duì)Ability的創(chuàng)建和使用進(jìn)行講解。首先在課程中我們將帶領(lǐng)大家使用DevEco Studio創(chuàng)建一個(gè)Stage模型Ability,并使用UIAbilityContext啟動(dòng)
    的頭像 發(fā)表于 05-08 14:41 ?743次閱讀
    HarmonyOS開發(fā)案例:【Stage模型下Ability的<b class='flag-5'>創(chuàng)建和</b>使用】

    AWTK 開源串口屏開發(fā)(17) - 通過 MODBUS 訪問數(shù)組數(shù)據(jù)

    在AWTK串口屏中,內(nèi)置MODBUS客戶端通道模型,不用編寫代碼即可實(shí)現(xiàn)在ListView中顯示遠(yuǎn)程設(shè)備上的數(shù)組數(shù)據(jù)。1.功能不用編寫代碼,實(shí)現(xiàn)對(duì)遠(yuǎn)程設(shè)備上數(shù)組數(shù)據(jù)的顯示。2.創(chuàng)建項(xiàng)目從模板創(chuàng)
    的頭像 發(fā)表于 04-29 08:25 ?353次閱讀
    AWTK 開源串口屏開發(fā)(17) - 通過 MODBUS 訪問<b class='flag-5'>數(shù)組</b>數(shù)據(jù)

    深入探索KUKA KRL中的數(shù)組應(yīng)用

    如果 CHAR 類型數(shù)組的所有數(shù)組元素都擁有相同的字符串,則不必單獨(dú)初始化每個(gè)數(shù)組元素。忽略右側(cè)的數(shù)組下標(biāo)。(對(duì)于一維數(shù)組下標(biāo),不寫下標(biāo)。)
    的頭像 發(fā)表于 04-18 10:37 ?1262次閱讀
    深入探索KUKA KRL中的<b class='flag-5'>數(shù)組</b>應(yīng)用

    數(shù)組和鏈表在內(nèi)存中的區(qū)別 數(shù)組和鏈表的優(yōu)缺點(diǎn)

    數(shù)組和鏈表在內(nèi)存中的區(qū)別 數(shù)組和鏈表的優(yōu)缺點(diǎn)? 數(shù)組和鏈表是常見的數(shù)據(jù)結(jié)構(gòu),用于組織和存儲(chǔ)數(shù)據(jù)。它們?cè)趦?nèi)存中的存儲(chǔ)方式以及優(yōu)缺點(diǎn)方面存在一些顯著的差異。本文將詳細(xì)探討這些差異以及它們的優(yōu)缺點(diǎn)。 1.
    的頭像 發(fā)表于 02-21 11:30 ?1050次閱讀

    數(shù)組和鏈表有何區(qū)別

    數(shù)組和鏈表的區(qū)別,這個(gè)問題,不僅面試中經(jīng)常遇到,考研的同學(xué)也得掌握才行。
    的頭像 發(fā)表于 02-19 15:33 ?518次閱讀
    <b class='flag-5'>數(shù)組</b>和鏈表有何區(qū)別

    【基于Lattice MXO2的小腳丫FPGA核心板】工程創(chuàng)建和固件燒錄

    通信 板卡尺寸52mm x 18mm 引腳的定義如圖所示 FPGA工程搭建和燒錄 使用Lattice的Diamond進(jìn)行該款FPGA的開發(fā),在Diamond的起始頁(yè),選擇\"New
    發(fā)表于 01-31 21:01

    鴻蒙二進(jìn)制數(shù)組創(chuàng)建

    背景 c++層數(shù)據(jù)都是二進(jìn)制,需要轉(zhuǎn)換成arrayBuffer透?jìng)鞯絜ts層給業(yè)務(wù)使用,但是鴻蒙的使用下面兩個(gè)api創(chuàng)建出來的二進(jìn)制數(shù)組數(shù)據(jù)都是錯(cuò)誤的。 接口
    的頭像 發(fā)表于 01-31 15:24 ?1278次閱讀

    PHP中數(shù)組的使用方法!

    如何創(chuàng)建數(shù)組、添加/刪除元素、訪問數(shù)組元素、遍歷數(shù)組以及使用數(shù)組方法和函數(shù)等等。 首先,我們來看一下如何
    的頭像 發(fā)表于 01-12 15:11 ?558次閱讀

    鴻蒙Ability開發(fā)-Stage模型下Ability的創(chuàng)建和使用

    ,對(duì)Ability的創(chuàng)建和使用進(jìn)行講解。首先在課程中我們將帶領(lǐng)大家使用DevEco Studio創(chuàng)建一個(gè)Stage模型Ability,并使用UIAbilityContext啟動(dòng)另一個(gè)Ability,然后借助Want
    發(fā)表于 01-08 15:34