第二十二章 神奇的口袋(下)
而且C語(yǔ)言為我們提供了兩種向口數(shù)組面放數(shù)據(jù)的方式,第一種是一次性放進(jìn)去:
int arr[10]={0, 1, 2, 3, 4 ,5 ,6, 7, 8, 9};
這樣數(shù)組會(huì)根據(jù)右邊大括號(hào)中的順序按0到9對(duì)這10個(gè)數(shù)據(jù)進(jìn)行編號(hào),也就是說(shuō)arr[0]等于0,arr[1]等于1,以此類推,arr[9]等于9。
使用這種方法甚至不用告訴計(jì)算機(jī)有多少個(gè)元素,它會(huì)根據(jù)大括號(hào)里面的內(nèi)容去推斷,所以說(shuō)用下面這種寫法也是可以的?!?p> int arr[]={0, 1, 2, 3, 4 ,5 ,6, 7, 8, 9};
「這么看來(lái),計(jì)算機(jī)也并不是完全是個(gè)智障嘛,還有一點(diǎn)推斷能力。那另外一種放東西的方式是怎樣的呢?」
我打趣道。
「哈哈,另外一種,就是一個(gè)一個(gè)的往里面放咯。就像這種:
int arr[10];
arr[0]= 0;
arr[1]= 1;
……
arr[9]= 9;
不過(guò)有一點(diǎn)要注意,如果要一次性把數(shù)據(jù)放進(jìn)數(shù)組這個(gè)袋子里只有一次機(jī)會(huì),就是在聲明完成之前,像下面這種方式就是錯(cuò)誤的,:
int arr[10];
arr ={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
在執(zhí)行int arr[10];的時(shí)候,數(shù)組的聲明就已經(jīng)完成了。」
「好嘛,曉得了?!?p> 我點(diǎn)了點(diǎn)頭。
「那對(duì)于如何得到一個(gè)口袋這塊有什么問題么?」
「嗯~,這個(gè)倒是沒有什么。」
我搖了搖頭,然后接著說(shuō)道:「我在想,如果把剛剛你說(shuō)的那個(gè)地圖數(shù)據(jù)用一個(gè)數(shù)組把它裝起來(lái)倒是沒有問題,不過(guò)好像要得到行號(hào)和列號(hào)就有些困難了?!?p> 我蹙眉苦思道。
「我們依然用剛剛那個(gè)地圖數(shù)據(jù)來(lái)說(shuō)明:
編號(hào)_行號(hào)_列號(hào) 0 1 2 3 4 5 6 7
00____0_______0 0 3 3 3 0 0 0
08____1_______0 0 3 4 3 0 0 0
16____2_______0 0 3 0 3 3 3 3
24____3_______3 3 3 2 0 2 4 3
32____4_______3 4 0 2 1 3 3 3
40____5_______3 3 3 3 2 3 0 0
48____6_______0 0 0 3 4 3 0 0
56____7_______0 0 0 3 3 0 0 0
在左邊我標(biāo)出了每一行第一個(gè)元素在數(shù)組中的編號(hào)以及行號(hào),在上方我標(biāo)出了列號(hào),你能夠看出行號(hào)和列號(hào)與數(shù)組編號(hào)的關(guān)系嗎?」
「行號(hào)等于每一行第一個(gè)元素的數(shù)組標(biāo)號(hào)除以8!列號(hào)等于數(shù)組編號(hào)減去每一行第一個(gè)元素的數(shù)組編號(hào)!」
我驚奇地叫到,仿佛發(fā)現(xiàn)了新大陸。
「雖然不是完全正確,但是已經(jīng)接近真實(shí)答案了!再觀察一下呢!說(shuō)不定就發(fā)現(xiàn)規(guī)律了哦?!?p> 老爹笑了笑。
「嗯……」
我咬著左手拇指指甲,睜大眼睛盯著著屏幕上老爹打出來(lái)的這些數(shù)字,想從其中找出點(diǎn)什么規(guī)律來(lái)。
在這個(gè)過(guò)程中,老爹一直沒有打擾我。不過(guò)我始終不得要領(lǐng),直到把指甲咬碎了一塊也沒有從中看出什么規(guī)律來(lái)。
「老爹,我沒有看出其他規(guī)律了……」
我眼巴巴地望向了老爹,只能向他求助了。
「其實(shí)你剛剛已經(jīng)說(shuō)得很相近了,就差那么一點(diǎn)點(diǎn)。不過(guò)沒關(guān)系了,畢竟以前你沒有接觸過(guò)這方面的,能夠一下子就找到先前的規(guī)律已經(jīng)很不錯(cuò)了。
其實(shí)元素在數(shù)組中的編號(hào)=行號(hào)x 8 +列號(hào),你看看是不是?」
「咦,還真是這樣!」
「所以啊,反過(guò)來(lái)的話,行號(hào)就等于數(shù)組編號(hào)對(duì)8做整除,列號(hào)等于數(shù)組編號(hào)對(duì)8取余數(shù)。有時(shí)候我們?cè)诳紤]一件事情的時(shí)候,如果暫時(shí)沒有答案,不妨換一個(gè)角度?!?p> 「嗯!」
隨機(jī)挑了幾個(gè)元素將老爹說(shuō)的規(guī)律驗(yàn)算了之后,我這才心悅誠(chéng)服地點(diǎn)了點(diǎn)頭。
「其實(shí)還有更簡(jiǎn)單的方法?!?p> 就在這時(shí),老爹又笑著拋出了一個(gè)深水炸彈。
「……老爹,你真的是名副其實(shí)的坑閨女啊,既然有簡(jiǎn)單的,為什么要繞這么大的圈子呢?」
我無(wú)語(yǔ)道。
「別先記著抱怨,一會(huì)兒等我說(shuō)完了你可能就知道為什么了。」
「那好吧~」
我拖長(zhǎng)了聲音,發(fā)出了自己的抗議。
「好,我接著買薯片的案例。
就在我們剛從超市出來(lái)的時(shí)候,你媽媽給我打了一個(gè)電話,說(shuō)趙叔叔來(lái)我們家做客了,讓你給趙叔叔的女兒靈筠也買幾包薯片,當(dāng)然了,還要給她帶幾包,于是我們又回超市買薯片。
因?yàn)槟銒寢屜矚g吃香焗番茄味道的薯片,而靈筠喜歡吃香烤原味,你喜歡吃的是紅酒牛排味的薯片,為了方便區(qū)分,于是你向收銀小姐姐要了兩個(gè)口袋,將香焗番茄味和香烤原味的薯片分別放到了不同的口袋中,這樣我們這兒就有三個(gè)口袋,分別是紅酒牛排味、香焗番茄味和香烤原味。
三個(gè)口袋提在手上很不方便,好在出門之前奶奶給了老爹一個(gè)布袋子,于是你就將這三個(gè)口袋一起放到了布袋當(dāng)中?!?p> 「嗯,然后呢?這個(gè)不是很正常么?」
我點(diǎn)了點(diǎn)頭,毫不在意地問道。
「問題的關(guān)鍵就在這里,我之前跟你說(shuō)過(guò),數(shù)組其實(shí)就是一個(gè)口袋,只是它會(huì)給口袋里面的東西編號(hào)。
既然現(xiàn)實(shí)中口袋里邊能夠再裝口袋,那么C語(yǔ)言中呢?
設(shè)想一下,如果我們把地圖的每一行數(shù)據(jù)都放到一個(gè)口袋(數(shù)組)里面,這樣就會(huì)有8個(gè)口袋(數(shù)組),然后我們?cè)儆靡粋€(gè)大口袋(數(shù)組)把這八個(gè)口袋(數(shù)組)裝起來(lái),這樣大口袋中對(duì)小口袋的編號(hào)不就是行號(hào)么,每個(gè)小口袋里面的元素編號(hào)不就是列號(hào)了么?
這樣一來(lái),獲取行號(hào)和列號(hào)就十分簡(jiǎn)單了,不需要進(jìn)行計(jì)算。」
「居然還有這種好東西,那C語(yǔ)言中是如何表示那個(gè)大口袋的?」
我眼睛一下子亮了,如果真有這個(gè)東西的話,的確要省事很多。
「在說(shuō)大口袋之前,要先給你介紹一個(gè)概念,也就是數(shù)組的維度。像我之前說(shuō)的那個(gè)直接裝薯片的口袋,也就是在C語(yǔ)言中直接裝某種數(shù)據(jù)類型的數(shù)組,比如說(shuō):int array[10],char array[10],double array[10]這樣的被叫做一維數(shù)組。
而剛剛說(shuō)的大袋子,也就是里面放著小袋子的數(shù)組,在C語(yǔ)言中則是一個(gè)數(shù)組里面裝的一維數(shù)組,這樣的數(shù)組就叫做二維數(shù)組。通過(guò)我們剛剛的分析,二維數(shù)組特別適合用來(lái)保存具有行和列這樣的表格數(shù)據(jù)。
二比如說(shuō)我們要定義一個(gè)4行3列的int型二維數(shù)組,那么就是這樣的:int[4][3]。其實(shí)按照我們裝薯片的方式來(lái)解釋更容易明白,定義一個(gè)大袋子,可以裝4個(gè)小袋子,然后每個(gè)小袋子里面裝了三包薯片。
有一點(diǎn)是需要注意的,那就是無(wú)論是大袋子還是小袋子要裝幾個(gè)元素必須在定義的時(shí)候指定清楚,否則編譯器就會(huì)報(bào)錯(cuò)?!?p> 「哦~,原來(lái)是這樣啊。那三維數(shù)組是不是一個(gè)超級(jí)大袋子,里面裝了幾個(gè)大袋子,然后每個(gè)大袋子里面又裝了幾個(gè)小袋子,每個(gè)小袋子里面裝了幾包薯片。按照一維數(shù)組、二維數(shù)組的規(guī)律來(lái)看,三維數(shù)組的表示方法應(yīng)該就是:int[4][5][6]這種了吧?」
我摸著下巴推斷道。
「完全正確!其實(shí)從本質(zhì)上來(lái)看,無(wú)論幾維數(shù)組,其實(shí)都是一維,只是元素的類型不同罷了。三維數(shù)組的元素類型是二維數(shù)組,二維數(shù)組的元素是一維數(shù)組,一維數(shù)組的元素是具體的數(shù)據(jù)。不過(guò)為了方便理解才引入了維度這個(gè)概念,而且大家都是這么描述數(shù)組的,所以我們也就沿用吧?!?p> 老爹摸了摸我的頭,笑著說(shuō)道。
任煦之秋
嘗試了好多次,不能顯示多的空格,為了能夠?qū)φR好看,我也是費(fèi)盡了心思,我太難了……在看的朋友冒個(gè)泡好么?總感覺自己在玩兒?jiǎn)螜C(jī),謝謝