下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C語言與java語言中關(guān)于二維數(shù)組的區(qū)別目錄C語言數(shù)中二維數(shù)組的定義格式Java語言中二維數(shù)組的定義與初始化靜態(tài)初始化動(dòng)態(tài)初始化下面給出兩者的對(duì)比截圖C語言中的數(shù)組元素分布Java中的數(shù)組元素分布數(shù)組是編程語言中常用的數(shù)據(jù)結(jié)構(gòu),然而在不同的環(huán)境下,其定義及初始化的方式也不盡相同。下面來講述一下C和Java中對(duì)于二維數(shù)組定義的區(qū)別以及其背后的原理。
在C語言中,二維數(shù)組的初始化可以省略行數(shù),但不能省略列數(shù);而在java中卻是正好相反的,即列數(shù)可以省略,而行數(shù)是不能省略的。為什么會(huì)是這樣呢?首先我們來回顧一下C和Java中二維數(shù)組的定義。
C語言數(shù)中二維數(shù)組的定義格式
類型名數(shù)組名[行數(shù)][列數(shù)];
例如:
inta[3][2];/*表示定義了二維數(shù)組a,3行2列,6個(gè)元素*/
可見,在C語言中,二維數(shù)組的元素?cái)?shù)量等于行數(shù)和列數(shù)的乘積,所以二維數(shù)組一經(jīng)定義,其被分配的內(nèi)存大小就已經(jīng)確定了。
因此,對(duì)于單純的定義二維數(shù)組來說,其行和列都是不可省略的,一旦有省略,那么在編譯時(shí)就會(huì)報(bào)數(shù)組內(nèi)存大小不確定的錯(cuò)誤。
代碼段及編譯結(jié)果如下圖所示:
inta[][5];/*在定義數(shù)組a時(shí)省略了行數(shù)*/
而我們所說的可以省略行數(shù),是在對(duì)二維數(shù)組初始化的時(shí)候,即在定義時(shí)給數(shù)組元素賦初值的時(shí)候。要想編譯時(shí)不報(bào)錯(cuò),就需要讓編譯器知道該數(shù)組占用的內(nèi)存空間,只不過在有省略的情況下就只能讓編譯器自己推斷出數(shù)組占用的內(nèi)存空間了,那么為什么省略了行就能夠推斷出來,而省略了列就不可以呢?
這就要提到二維數(shù)組元素在內(nèi)存中的存儲(chǔ)方式了。C語言是按照先行后列的順序來存儲(chǔ)數(shù)組的,即先存儲(chǔ)第0行的元素,然后是第1行的元素,以此類推。所以編譯器必須知道每行元素的個(gè)數(shù),才能由初始化的結(jié)果推斷出行數(shù),進(jìn)而推斷出二維數(shù)組所占用的內(nèi)存空間。而每行元素的個(gè)數(shù)正是二維數(shù)組的列標(biāo)。
Java語言中二維數(shù)組的定義與初始化
在Java語言中對(duì)于二維數(shù)組的定義稍微有些復(fù)雜,創(chuàng)建一個(gè)Java數(shù)組需要三個(gè)步驟:聲明數(shù)組、創(chuàng)建數(shù)組空間、創(chuàng)建數(shù)組元素并初始化。
其中初始化可以分為:靜態(tài)初始化和動(dòng)態(tài)初始化。
靜態(tài)初始化
int[][]arr=newint[][]{{1,2,3,6},{4,5},{7,8,9}};
intarr[][]={{1,2,3,6},{4,5},{7,8,9}};
動(dòng)態(tài)初始化
int[][]arr3=newint[4][3];
int[][]arr4=newint[4][];
由動(dòng)態(tài)初始化可以看出,在還沒有為二維數(shù)組元素賦初值時(shí),列下標(biāo)是可以省略的。在這里要聲明的一點(diǎn)是:C語言中二維數(shù)組的每個(gè)元素都是大小相同的一維數(shù)組,即如果把其中的各個(gè)元素鋪開,會(huì)是一個(gè)矩形;但在Java中并不要求每一個(gè)一維數(shù)組的大小一致,所以也就不能在定義的時(shí)候說明列數(shù)。
下面給出兩者的對(duì)比截圖
(以相同的元素分別為C和Java中的二維數(shù)組初始化)
C語言中的數(shù)組元素分布
intarr[3][4]={{1,2,3,6},{4,5},{7,8,9}};
for(inti=0;ii++){
for(intj=0;jj++){
printf("%d",arr[i][j]);
printf("\n");
}
Java中的數(shù)組元素分布
int[][]arr=newint[][]{{1,2,3,6},{4,5},{7,8,9}};
for(inti=0;iarr.length;i++){
for(intj=0;jarr[i].length;j++){
System.out.print(arr[i][j]+"");
System.out.println();
}
那么Java的二維數(shù)組是怎樣存儲(chǔ)的呢?
Java二維數(shù)組的數(shù)組名存儲(chǔ)在棧中,堆里面存放的是new出來的結(jié)構(gòu),比如具體的數(shù)組元素。在定義二維數(shù)組時(shí),先在棧里申請(qǐng)行數(shù),然后等具體要用到哪一個(gè)一維數(shù)組了再向堆申請(qǐng)內(nèi)存。
所以在定義二維數(shù)組時(shí),若省略了列數(shù),則可以看做是申請(qǐng)了若干個(gè)(行數(shù))一維數(shù)組,但是具體的一維數(shù)組中的數(shù)據(jù)暫時(shí)是不知道的。
下面給出Java中二維數(shù)組的內(nèi)存解析圖:
由上圖可知:數(shù)組arr1在定義時(shí)行標(biāo)和列標(biāo)都給出了,其定義的過程可以描述為:先在棧里為arr1申請(qǐng)行數(shù),即為arr1申請(qǐng)一片空間并把空間的首地址賦給arr1,相當(dāng)于確定好了該二維數(shù)組arr1中有三個(gè)元素,分別為三個(gè)一維數(shù)組。而列標(biāo)被定義出來就意味著為二維數(shù)組的每個(gè)數(shù)據(jù)元素都分配好了內(nèi)存空間,并把三個(gè)一維數(shù)組的首地址傳了過去。對(duì)于arr1的各個(gè)數(shù)據(jù)元素,因?yàn)樵诙x的時(shí)候沒有賦初值,且是String類型,所以默認(rèn)為null。
數(shù)組arr2在定義時(shí)省略了列標(biāo),所以相當(dāng)于只給出了arr2這個(gè)int型二維數(shù)組的四個(gè)一維數(shù)組元素,而沒有為這四個(gè)一維數(shù)組賦初值。而因?yàn)閍rr2的四個(gè)元素都為引用數(shù)據(jù)類型(數(shù)組),所以默認(rèn)值為null。
arr2[1]=newint[5];相當(dāng)于為arr2的第二個(gè)元素指明了一塊內(nèi)存空間,并把這塊空間的首地址賦給了arr2[1],arr2[1]的長度為5,元素類型為int型,又因?yàn)闆]有為這個(gè)一維數(shù)組賦初值,所以默認(rèn)值為0。arr2[1][1]=1;的作用是把a(bǔ)rr2[1]這個(gè)一維數(shù)組的第二個(gè)元素賦值為1。arr2[2][2]=1;因?yàn)闆]有為arr2的第三個(gè)元素分配內(nèi)存空間,所以此時(shí)會(huì)報(bào)空指針異常。
最后,再次回到Java中定義二維數(shù)組時(shí)為什么
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026廣東惠州市博羅縣中小企業(yè)發(fā)展事務(wù)中心招聘編外人員1人備考題庫含答案詳解
- 食品不合格食品處置制度
- 2026江西吉安市新供商貿(mào)物流有限公司招募就業(yè)見習(xí)人員2人備考題庫及答案詳解參考
- 罕見腫瘤的個(gè)體化治療藥物相互作用管理策略與決策-3
- 2026江西安源路橋集團(tuán)有限公司外聘人員招聘2人備考題庫有答案詳解
- 2026廣西百色市事業(yè)單位招聘1563人備考題庫有答案詳解
- 罕見腫瘤的個(gè)體化治療生活質(zhì)量干預(yù)措施與心理需求
- 少兒培訓(xùn)財(cái)務(wù)制度
- 砂石礦財(cái)務(wù)制度
- 建筑工程業(yè)財(cái)務(wù)制度
- 開放性氣胸的臨床護(hù)理
- 山洪災(zāi)害監(jiān)理工作報(bào)告
- 鞏膜炎的治療
- 學(xué)?!暗谝蛔h題”學(xué)習(xí)制度
- DBJ52T-既有建筑幕墻安全性檢測(cè)鑒定技術(shù)規(guī)程
- 運(yùn)輸管理實(shí)務(wù)(第二版)李佑珍課件第6章 集裝箱多式聯(lián)運(yùn)學(xué)習(xí)資料
- 影片備案報(bào)告范文
- 心臟驟停應(yīng)急預(yù)案及流程
- 中山市市場(chǎng)主體住所(經(jīng)營場(chǎng)所)信息申報(bào)表
- 播種施肥機(jī)械
- 初中校本課程-【課堂實(shí)錄】美麗的24節(jié)氣教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
評(píng)論
0/150
提交評(píng)論