二維數(shù)組第一維是什么 為什么我覺得C語言中二維數(shù)組沒用,明明兩個(gè)一維數(shù)組就能解決,為什么要有二維數(shù)組存在?
為什么我覺得C語言中二維數(shù)組沒用,明明兩個(gè)一維數(shù)組就能解決,為什么要有二維數(shù)組存在?從底層實(shí)現(xiàn)來看,無論是一維數(shù)組、二維數(shù)組還是多維數(shù)組,都是以一維方式排列在內(nèi)存中。用一維陣列模擬多維陣列。從這一點(diǎn)出
為什么我覺得C語言中二維數(shù)組沒用,明明兩個(gè)一維數(shù)組就能解決,為什么要有二維數(shù)組存在?
從底層實(shí)現(xiàn)來看,無論是一維數(shù)組、二維數(shù)組還是多維數(shù)組,都是以一維方式排列在內(nèi)存中。用一維陣列模擬多維陣列。從這一點(diǎn)出發(fā),一維陣列可以解決多維陣列的問題。常用的模擬方法:
將二維數(shù)組a[M][n]表示為一維數(shù)組a[M*n
]用[y*nx]代替[y][x
]注意這里用一維數(shù)組代替二維數(shù)組
從代碼清晰易讀的角度來看,二維數(shù)組和多維數(shù)組是不同的有意義。有很多數(shù)據(jù)可以用二維數(shù)組或多維數(shù)組來表示。如果數(shù)據(jù)以適當(dāng)?shù)姆绞奖硎?,算法將簡潔明了。典型?shù)據(jù)適合二維數(shù)組表示,如平面圖形、矩陣。采用二維數(shù)組,程序清晰易讀;采用一維數(shù)組,可讀性要低得多。
與匯編語言相比,C提供了一些數(shù)據(jù)抽象,如數(shù)組、結(jié)構(gòu)和聯(lián)合。事實(shí)上,沒有這些抽象,程序仍然可以被編程。但C語言的優(yōu)點(diǎn)是具有高度的抽象性,非常適合于系統(tǒng)級程序的開發(fā)和維護(hù)。如果您認(rèn)為C語言提供的抽象級別太高,那么匯編可能更適合您的項(xiàng)目。如果您認(rèn)為C語言提供的抽象級別太低,那么有很多選擇。從C、java到各種新語言,您可以嘗試替換它們。
C 編程二維數(shù)組做參數(shù)?
“Char a[[x]”(推薦)或“Char*a”可用于傳遞“二維數(shù)組”,而不會在您的大腦中出錯。
所謂的二維數(shù)組A實(shí)際上是一維數(shù)組,但是編譯器在編譯時(shí)會為您翻譯它。
例如,
char original[5][10
]使用original[i][J]時(shí),編譯器將調(diào)用*(original 10*i J),所以編譯器必須知道你的“二維數(shù)組”的第二維度(10)
我所說的大腦無錯誤是指你應(yīng)該知道數(shù)組的每個(gè)維度的大?。ǖ谝痪S度可能不知道)。
例如,原始定義為
char original[5][10
,則參數(shù)為char a[[10]=original(調(diào)用函數(shù)),則可以正常使用。
傳遞參數(shù)char*a=(char*)original(調(diào)用函數(shù)),然后您需要編寫一個(gè)[10*ij]類似的東西。。
當(dāng)然,您也可以傳遞第二維度的大小作為參數(shù)。然后使用。。
將二維數(shù)組轉(zhuǎn)為一維數(shù)組的2種方法?
如下圖所示,后面板將數(shù)組的每個(gè)維度的大小相乘為維度,并將其轉(zhuǎn)換為一維數(shù)組。事實(shí)上,這種新方法適用于各種維(如二維、三維甚至更高維)和各種維(不限于2×2,幾次幾行)的陣列成一維陣列。請參閱附件中的程序。我已經(jīng)轉(zhuǎn)換到版本8.6,可以直接打開。
為什么c中二維數(shù)組聲明只能省略行數(shù)?
當(dāng)二維數(shù)組用作參數(shù)時(shí),必須指定所有維度或忽略第一維度,但不能忽略第二維度或更高維度的大小,這受編譯器原則的限制。實(shí)際上,編譯器處理數(shù)組的方式如下:
將數(shù)組int設(shè)置為a[M][n]。如果要訪問a[i][J]的值,編譯器的尋址方法是:]&A[i][J]=&A[0][0]i*sizeof(int)*N J*sizeof(int)//注意N是第二個(gè)維度的維度,因此可以省略第一個(gè)維度的維度,而不能省略其他維度的維度。
定義二維數(shù)組時(shí),初始化它或忽略第一個(gè)維度。編譯器將根據(jù)您的初始化語句自動確定第一個(gè)維度。
下面是一個(gè)示例:][CPP]查看純拷貝
#include
#include
#include
int main()
{
char a[10][10
]memset(a,0,sizeof(a))
printf(%dn”,sizeof(a))
for(int i=0I
{
for(int j=0j
printf(%d”,[i][J])
}]系統(tǒng)(“暫?!?/p>
]返回0
}