爲什麼使用二維數組時只有第二維對編譯器很重要?只是無法理解我的頭腦。 謝謝爲什麼只有第二個數組維度重要?
7
A
回答
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甚至無效的位置。
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]
。沒有這些尺寸,就無法計算元素的地址。
相關問題
- 1. 獲得第二維的數組長度
- 2. 爲什麼第二個數組比第一個少一個?
- 3. 多維數組中的第二維從未達到過,爲什麼?
- 4. 這個Java數組爲什麼被認爲是二維的?
- 5. ReDim現有的數組與第二維?
- 6. 爲什麼這個DQL查詢生成一個二維數組?
- 7. 將二維數組轉換爲二維數組的多個塊
- 8. Java多維數組 - 爲什麼只定義足夠的第一個大小?
- 9. 二維數組錯誤,長度爲
- 10. $ _POST從數組的第二個維度值
- 11. Java;二維數組長度
- 12. 爲什麼我得到這個二維數組的錯誤?
- 13. 爲什麼我不能生成這個10x10二維數組?
- 14. 這兩個二維數組有什麼區別?
- 15. 將一維數組爲二維數組
- 16. 二維數組重新調整爲空
- 17. 如何只訪問第二個數組?
- 18. 第二個數組只是隨機的
- 19. 將兩個一維數組轉換爲單個二維數組
- 20. 在使用Java創建一個二維數組,爲什麼第二個方面讓我用2,而不是1
- 21. 爲什麼我們在傳遞動態二維數組時不需要列數?
- 22. 爲什麼我的遞歸函數沒有第二個參數?
- 23. 爲什麼我的二維數組的所有行都只有我傳給它們中的一個的值?
- 24. 爲什麼不能傳遞一個二維數組作爲函數參數?
- 25. javascript將第一個數組值替換爲第二個數組值。第一個數組長度是2,第二個長度是7
- 26. 將二維數組轉換爲一維數組(有條件)
- 27. 爲什麼只返回數組的第一個元素?
- 28. 在numpy中,用一維數組乘以三維數組的第二維的最快方法是什麼?
- 29. DotNetHighcharts - 如何只使用二維數組的第一列作爲數據
- 30. 的JavaScript:轉換一個多維數組爲二維數組
您能舉個例子嗎?如果我有一個[3] [4]編譯器只需要一個[] [4],它怎麼樣?我無法理解這一點。真。 – 2010-04-01 17:04:30
它給編譯器提供足夠的信息來知道如何將內容放在內存中。如果你有12個元素並告訴它一個[] [],它可以是乘以12的任意兩個數字(x和y)。如果你給它一個[] [4],它知道x和4乘以12 ,所以x必須是3.如果它有助於使其合理化,請設置一個基本方程式,其左側的每個維度和右側的元素總數。解決超過1個變量是困難的或不可能的。 – ssube 2010-04-01 17:28:33
@peachykeen:這有些誤導。計算數組元素的地址時需要使用這些維度。然而,第一個維度是不需要的,因爲它不是地址計算所必需的(上限是無關緊要的)。 – 2010-04-01 18:51:44