第 13 講:高維數(shù)組
有沒有三維數(shù)組?
前文已經(jīng)描述了一維數(shù)組和二維數(shù)組的基本語法和使用方式。那么,按道理來說,三維數(shù)組或者更高維度的數(shù)組是存在的。確實(shí)如此。不過……
三維數(shù)組的定義
拿三維數(shù)組來說,我們要定義一個(gè)三維數(shù)組,并按照規(guī)范初始化賦值,就得是這樣的:
或
第一,不完全賦值是可以混用的,比如第一個(gè)示例里的賦值模式,在第一個(gè)大括號(hào)里給了一個(gè) 0,這表示會(huì)把第一個(gè)維度里的所有元素全部賦值為 0。那么第一個(gè)維度里包含哪些元素呢?或者說,元素一共多少個(gè)呢?
可以從最上面的定義語句的行元素?cái)?shù)、列元素?cái)?shù)和豎元素?cái)?shù)看出,這個(gè)三維數(shù)組一共有 2 行 3 列 4 豎。不過三維數(shù)組復(fù)雜的地方在于,它如何規(guī)劃內(nèi)存空間。我們依舊按照順次來看。這個(gè)三維數(shù)組會(huì)分為兩個(gè)大塊來表示行,即這個(gè)是一個(gè)一維數(shù)組,而這個(gè)一維數(shù)組一共包含兩個(gè)元素,都存放的是一個(gè)二維數(shù)組,而這個(gè)二維數(shù)組內(nèi)存放著 3 行 4 列的元素,這么一個(gè)情況。
不過,可以從分配內(nèi)存空間來看,三維數(shù)組只能省略行元素個(gè)數(shù)這一個(gè)條件。
三維數(shù)組的存取數(shù)值
三維數(shù)組的存取數(shù)值的方式和二維數(shù)組雷同,不過還是希望你注意的是,每一個(gè)維度的索引都是從 0 開始的,所以不要忘了這一點(diǎn),而超出了數(shù)組內(nèi)存的范圍。
將會(huì)取出這個(gè)數(shù)組的第二行、第三列的第四個(gè)元素。
更高維度的數(shù)組?
是的,C 語言甚至允許你創(chuàng)建四維數(shù)組、五維數(shù)組等等。那么 C 語言創(chuàng)建數(shù)組的上限是多少呢?維度是沒有上限一說的,但它受到電腦容量的制約。
如果你嘗試把數(shù)組元素總數(shù)定義得過大的話,就會(huì)出現(xiàn)這個(gè)錯(cuò)誤信息:

這個(gè)錯(cuò)誤信息意味著你的數(shù)組定義得太大了。具體的內(nèi)容說的是:“函數(shù)在棧里使用了 '2147483644' 字節(jié),超出了原本定義的棧大小 '16384',請(qǐng)嘗試移動(dòng)一些數(shù)據(jù)到堆里去”。
按照 16384 而言,你只能定義一個(gè)小于這么多的所占內(nèi)存的數(shù)組。而在外部定義也不可以超過 1073741823 個(gè)元素。
所以,請(qǐng)你合理使用內(nèi)存。