2010-04-01 58 views

回答

6

因爲編譯器需要弄清楚如何從內存訪問數據。第一個維度並不重要,因爲編譯器可以在給出所有其他大小時計算項目的數量。

實例:

int a1[] = { 1, 2, 3, 4 } 

編譯器知道到4點的整數分配空間。現在,與此:

int a2[][] = { 1, 2, 3, 4, 5, 6} } 

編譯器不能決定是否應該A2 [1] [6]或a2 [2] [3]或a2 [3] [2]或a2 [6] [1] 。一旦你告訴它第二個維度,它可以計算出第一個維度。

例如,試圖訪問元素a2 [1] [0]將根據聲明產生不同的值。你可能會得到2,3,4甚至無效的位置。

+0

您能舉個例子嗎?如果我有一個[3] [4]編譯器只需要一個[] [4],它怎麼樣?我無法理解這一點。真。 – 2010-04-01 17:04:30

+0

它給編譯器提供足夠的信息來知道如何將內容放在內存中。如果你有12個元素並告訴它一個[] [],它可以是乘以12的任意兩個數字(x和y)。如果你給它一個[] [4],它知道x和4乘以12 ,所以x必須是3.如果它有助於使其合理化,請設置一個基本方程式,其左側的每個維度和右側的元素總數。解決超過1個變量是困難的或不可能的。 – ssube 2010-04-01 17:28:33

+0

@peachykeen:這有些誤導。計算數組元素的地址時需要使用這些維度。然而,第一個維度是不需要的,因爲它不是地址計算所必需的(上限是無關緊要的)。 – 2010-04-01 18:51:44

1

坐下並找出給定數組起始位置的a[i][j]的內存位置。

注意,C數組奠定了這樣a[0][0]a[0][1]a[0][2] ... a[0][M]a[1][0] ......

旁註: FORTRAN陣列異地佈置:a[1][1]a[2][1]a[3][1] ... a[N][1]a[1][2] ..

請注意這將如何改變哪個尺寸是查找內存位置所需的。

4

它不是「第二維」(除非你只有2個維度) - 它是「除第一維以外的所有」。例如,你可以有int a[][2][3][4]。沒有這些尺寸,就無法計算元素的地址。

相關問題