二維矩陣計算 為什么我覺得C語言中二維數(shù)組沒用,明明兩個一維數(shù)組就能解決,為什么要有二維數(shù)組存在?
為什么我覺得C語言中二維數(shù)組沒用,明明兩個一維數(shù)組就能解決,為什么要有二維數(shù)組存在?從底層實現(xiàn)來看,無論是一維數(shù)組、二維數(shù)組還是多維數(shù)組,都是以一維方式排列在內(nèi)存中。用一維陣列模擬多維陣列。從這一點出
為什么我覺得C語言中二維數(shù)組沒用,明明兩個一維數(shù)組就能解決,為什么要有二維數(shù)組存在?
從底層實現(xiàn)來看,無論是一維數(shù)組、二維數(shù)組還是多維數(shù)組,都是以一維方式排列在內(nèi)存中。用一維陣列模擬多維陣列。從這一點出發(fā),一維陣列可以解決多維陣列的問題。常用的模擬方法:
將二維數(shù)組a[M][n]表示為一維數(shù)組a[M*n
]用[y*nx]代替[y][x
]注意這里用一維數(shù)組代替二維數(shù)組
從代碼清晰易讀的角度來看,二維數(shù)組和多維數(shù)組是不同的有意義。有很多數(shù)據(jù)可以用二維數(shù)組或多維數(shù)組來表示。如果數(shù)據(jù)以適當?shù)姆绞奖硎?,算法將簡潔明了。典型?shù)據(jù)適合二維數(shù)組表示,如平面圖形、矩陣。采用二維數(shù)組,程序清晰易讀;采用一維數(shù)組,可讀性要低得多。
與匯編語言相比,C提供了一些數(shù)據(jù)抽象,如數(shù)組、結構和聯(lián)合。事實上,沒有這些抽象,程序仍然可以被編程。但C語言的優(yōu)點是具有高度的抽象性,非常適合于系統(tǒng)級程序的開發(fā)和維護。如果您認為C語言提供的抽象級別太高,那么匯編可能更適合您的項目。如果您認為C語言提供的抽象級別太低,那么有很多選擇。從C、java到各種新語言,您可以嘗試替換它們。
怎么計算二維數(shù)組的長度?
Strlen(STR)首先,STR[20]={a“,”B“,”C“,”0“}printf(%d”,Strlen(STR))輸出值3,而不是20,因為Strlen識別值0,0考慮結束。Sizeof(STR)顯示數(shù)組的大小,無論定義了什么0。1 4 62 6 33 0 47 5 3這是一個二維數(shù)組[4][3]它可以看作四個一維數(shù)組146 263 304 753。它的一維數(shù)組有多長?數(shù)數(shù)
Sizeof()可以做到。Sizeof(a[0])/4試試看。但是sizeof(a)不能,因為a也是二維數(shù)組。A[0]、A[1]等是具有三個元素的一維數(shù)組。
二維數(shù)組的元素個數(shù)怎么計算???
如果有選項基XX,例如,選項基1,(3,4)相當于(1到3,1到4),數(shù)組有3*4=12個元素。
例如,如果a(3,4),第一個維度是3,第二個維度是4,則數(shù)組有(3,1)*(4,1)=20個元素,因為下限默認為0,這相當于a(0到3,0到4)。
類似地,選項基2,a(3,4)相當于a(2到3,2到4),數(shù)組有(3-1)*(4-1)=6個元素。
N=(UBound(arr,1)-lbound(arr,1)1)*(UBound(arr,2)-lbound(arr,2)1)用公式中的arr替換數(shù)組名稱,以計算N的個數(shù),這與選項基數(shù)無關。
VBA判斷數(shù)組的上限和下限以及數(shù)組的長度(元素數(shù)、數(shù)組下限、lbound(數(shù)組)結果,通常為0。數(shù)組上限:UBound(array)數(shù)組長度:UBound(array)-lbound(array)1。