天天看點

《互動式程式設計 第2版》一2.3.2 數組

本節書摘來華章計算機《互動式程式設計 第2版》一書中的第2章 ,第2.3.2節,joshua noble 著 毛順兵 張婷婷 陳宇 沈鑫 任燦江 譯更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

數組比之前提到的資料類型要複雜一點。一個數組由1個或多個變量排列而成。要記住一點,本書一直在讨論的三個工具,它們工作起來是稍有不同的。我們現在就來看看,這三個工具各是如何填充數組的。

數組是由多個元素組成的清單。在以下的程式段裡,數組包含的是整數1、2和3。這并沒什麼精妙之外,但會是個不錯的起點。

注意圖2-2數組裡每個元素頭上的标記:numbers[0]、numbers[1]和 numbers[2],這些是通路數組的運算符。不是錄入錯誤,的确是從0開始。等我們學會怎麼建立數組之後再回頭讨論這個0的問題。

《互動式程式設計 第2版》一2.3.2 數組

圖2-2:含3個整數的數組

這個數組在processing裡是這樣建立的:

首先看這個數組的聲明,如圖2-3所示。

《互動式程式設計 第2版》一2.3.2 數組

圖2-3:processing對數組的聲明,該數組包含3個整數

數組所包含的元素可以是任何類型,甚至是你自己創造的類型。以上代碼塊将數組裡每一個元素都指派了。可使用運算符[ ]來通路方括号中序号所指的那個元素。

上面這一行将x指派為1,因為數組中首個元素是1。

上面這一行将y指派為第2個元素和第3個元素的和,即2+3,得到5。如果把等号放在帶有通路運算符的後面,則是對其指向的數組元素指派:

numbers[0]起初等于1,現在變成了5。數組就是一個倉庫,其中每個元素是盒子,盒子裡存放着聲明裡所規定類型的資料。數組元素一旦指派,則其值一直不變,直到将它重新指派。

以上我們對數組中的元素逐個指派,每次指派使用了一行代碼。其實也可以在一行内完成數組的指派。

注意,定義數組的時候不需要指明它的長度,例如上面的第一種寫法。當然,要一次性地将數組元素全部指派,你需要知道每個數組元素的值,否則還是建議你使用我們最先提到的逐個指派的方法。

接下來我們看一下在arduino中如何聲明數組。其實跟在processing中是差不多的,在arduino或c++裡建立數組有下面三種方式:

圖2-4把數組分解成了幾個部分。

《互動式程式設計 第2版》一2.3.2 數組

圖2-4:在c++中建立數組

processing唯一不同于arduino的是,processing支援用new這個關鍵字建立數組。如果知道數組中所有元素的值,你可以這樣寫:

否則,你應該這樣寫:

我們已經掌握了數組的基礎知識,現在可以去探讨一些較複雜的内容。首先我們來看看你必定會遇到的一些錯誤,例如各種各樣的“越界通路”。越界通路就是指你通路了一個并不存在于數組中的元素。

在arduino和c++裡,數組可以這樣初始化:

當你想使用變量badarrayaccess時,你會發現不僅它不是一個字元,而且通路它會導緻程式崩潰。數組arr有3個變量,但現在你卻試圖通路它的第4個變量,與當初定義arr時所指定的數組長度不符。另一個常見錯誤則是把與數組類型不符的變量存放于數組中,例如:

編譯平台不會對以上的代碼報錯,但結果是不對的,因為數組聲明它所裝載的元素是字元變量,而你卻往裡面放浮點型和布爾型變量,是以它們會被自動轉化成字元型變量,後果經常難以控制和預測。表2-1對各個資料類型作了簡明的比較,并列出在3種程式設計語言中的表示方式。

表2-1:資料類型比較

《互動式程式設計 第2版》一2.3.2 數組

繼續閱讀