c語(yǔ)言文件指針怎么移動(dòng) 為什么我覺(jué)得C語(yǔ)言中二維數(shù)組沒(méi)用,明明兩個(gè)一維數(shù)組就能解決,為什么要有二維數(shù)組存在?
為什么我覺(jué)得C語(yǔ)言中二維數(shù)組沒(méi)用,明明兩個(gè)一維數(shù)組就能解決,為什么要有二維數(shù)組存在?我也來(lái)說(shuō)說(shuō)。C語(yǔ)言沒(méi)有專(zhuān)門(mén)的二維數(shù)組首先,C語(yǔ)言中,基本類(lèi)型里有“數(shù)組”,也就是一維數(shù)組。而我們平時(shí)所說(shuō)的二維數(shù)組是
為什么我覺(jué)得C語(yǔ)言中二維數(shù)組沒(méi)用,明明兩個(gè)一維數(shù)組就能解決,為什么要有二維數(shù)組存在?
我也來(lái)說(shuō)說(shuō)。
C語(yǔ)言沒(méi)有專(zhuān)門(mén)的二維數(shù)組
首先,C語(yǔ)言中,基本類(lèi)型里有“數(shù)組”,也就是一維數(shù)組。而我們平時(shí)所說(shuō)的二維數(shù)組是元素為數(shù)組的數(shù)組,其實(shí)是一種用一維數(shù)組對(duì)二維數(shù)組的模擬。
一維數(shù)組可以解決多維問(wèn)題
從底層實(shí)現(xiàn)來(lái)說(shuō),無(wú)論是一維數(shù)組、二維數(shù)組還是多維數(shù)組,在內(nèi)存中都是以一維方式排列的。而多維數(shù)組也是用一維數(shù)組模擬實(shí)現(xiàn)的。從這一點(diǎn)來(lái)說(shuō),一維數(shù)組就能解決多維數(shù)組的問(wèn)題。常見(jiàn)的模擬方式:
將 二維數(shù)組a[m][n]表示為一維數(shù)組a[m*n]
用a[y*n x]代替a[y][x]
注意這里是用一個(gè)一維數(shù)組代替二維數(shù)組,而不是用兩個(gè)一維數(shù)組代替二維數(shù)組
多維數(shù)組有其存在的必要
從代碼清晰易讀的角度來(lái)說(shuō),二維數(shù)組、多維數(shù)組是有意義的。有許多數(shù)據(jù)是適合用二維數(shù)組或多維數(shù)組表示的。以適合的方式表示數(shù)據(jù),算法的編寫(xiě)也會(huì)簡(jiǎn)潔明了。典型的適合二維數(shù)組表示的數(shù)據(jù)如平面圖形、矩陣。用二維數(shù)組表示,程序清晰易讀;如果用一維數(shù)組表示,其可讀性就會(huì)低不少。
相對(duì)于匯編語(yǔ)言,C提供了一定的數(shù)據(jù)抽象,如數(shù)組、結(jié)構(gòu)體(struct)、聯(lián)合(union)。其實(shí)沒(méi)有這些抽象,程序照樣能編。但C語(yǔ)言的好處就在這里,它提供的抽象程度,非常適合系統(tǒng)級(jí)程序開(kāi)發(fā)和維護(hù)。如果覺(jué)得C語(yǔ)言提供的抽象程度過(guò)高,也許匯編更適合您的項(xiàng)目,如果覺(jué)得C語(yǔ)言提供的抽象程度過(guò)低,那選擇就多了,從C ,Java到現(xiàn)在的各種新語(yǔ)言,都可以嘗試更換。
如何在c語(yǔ)言二維數(shù)組中使用指針?
對(duì)于a[i][j](二維數(shù)組的大小為n×m)而言,首先要搞清楚行指針和列指針行指針:&a[i]或者a i指向行,&a[i]=&*(a i)=a i列指針:a[i]或*(a i)指向列,a[i]等價(jià)于*(a i)元素的引用方式有如下三種方式1.通過(guò)地址引用二維元素*(&a[i][j]),*(a[i] j),*(*(a i) j),*(a[0] m*i j)*(&a[0][0] m*i j)(*(a i))[j]2.建立一個(gè)指針數(shù)組引用二維元素int *p[3],a[3][2],i,jfor(i=0imain(){int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}int i,jprintf("輸入學(xué)生號(hào):0-2")scanf("%d",&i)printf("the score of No.%d are:n",i)for(j=0jmain(){int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}int *pfor(p=a[0]p
main(){int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}int i,j printf("輸入學(xué)生號(hào):0-2")scanf("%d",&i)printf("the score of No.%d are:n",i)for(j=0jmain(){int score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}int i,j,*p printf("輸入學(xué)生號(hào):")scanf("%d",&i)printf("the score of No.%d are:n",i)for(p=score[i]p
C語(yǔ)言中的二維數(shù)組名是一個(gè)二重指針嗎?
1、二維數(shù)組名不是二級(jí)指針,它只是一個(gè)比較特殊的常量指針。包括三維,四維,乃至N維數(shù)組也是如此。只要是數(shù)組,那么它就是一個(gè)普通的常量指針。2、二級(jí)指針p也可以解釋為指針的指針,即p內(nèi)保存的值實(shí)際上還是一個(gè)指針,計(jì)算:*p的值實(shí)際上是一個(gè)指針值,那么 *(*p)即二級(jí)指針指向的最終值。對(duì)于二維數(shù)組a[2][2],a也是一個(gè)地址,并且這個(gè)值也等于a[0],也等于a[0[0]的地址,即&a[0][0],由此看來(lái)對(duì)a取地址的值是一個(gè)變量值(不是指針),所以a并不是一個(gè)二級(jí)指針,最多算一個(gè)一級(jí)指針。