![二維數(shù)組定義以及動(dòng)態(tài)分配空間_第1頁(yè)](http://file4.renrendoc.com/view/be548694ed87e2885f08b28936dcf465/be548694ed87e2885f08b28936dcf4651.gif)
![二維數(shù)組定義以及動(dòng)態(tài)分配空間_第2頁(yè)](http://file4.renrendoc.com/view/be548694ed87e2885f08b28936dcf465/be548694ed87e2885f08b28936dcf4652.gif)
![二維數(shù)組定義以及動(dòng)態(tài)分配空間_第3頁(yè)](http://file4.renrendoc.com/view/be548694ed87e2885f08b28936dcf465/be548694ed87e2885f08b28936dcf4653.gif)
![二維數(shù)組定義以及動(dòng)態(tài)分配空間_第4頁(yè)](http://file4.renrendoc.com/view/be548694ed87e2885f08b28936dcf465/be548694ed87e2885f08b28936dcf4654.gif)
![二維數(shù)組定義以及動(dòng)態(tài)分配空間_第5頁(yè)](http://file4.renrendoc.com/view/be548694ed87e2885f08b28936dcf465/be548694ed87e2885f08b28936dcf4655.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、二維數(shù)組定義以及動(dòng)態(tài)分配空間(轉(zhuǎn))下面三種定義形式怎么理解?怎么動(dòng)態(tài)分配空間?、int*Ptr;、int*Ptr5;我更喜歡寫成int*Prt5;、int(*Ptr)5;此文引自網(wǎng)上,出處不詳,但是覺(jué)得非常好。略改了一點(diǎn)。多維數(shù)組一向很難,一般都采用一維數(shù)組,但是一旦要用到還真是頭疼。閑話少說(shuō),這里我就以三個(gè)二維數(shù)組的比較來(lái)展開(kāi)討論:、int*Ptr;、int*Ptr5;我更喜歡寫成int*Prt5;、int(*Ptr)5;以上三例都是整數(shù)的二維數(shù)組,都可以用形如Ptr11的方式訪問(wèn)其內(nèi)容;但它們的差別卻是很大的。下面我從四個(gè)方面對(duì)它們進(jìn)行討論:一、內(nèi)容:它們本身都是指針,它們的最終內(nèi)容都是整
2、數(shù)。注意我這里說(shuō)的是最終內(nèi)容,而不是中間內(nèi)容,比如你寫Ptr0,對(duì)于三者來(lái)說(shuō),其內(nèi)容都是一個(gè)整數(shù)指針,即int*;Ptr11這樣的形式才是其最終內(nèi)容。二、意義:(1)、int*Ptr表示指向一群指向整數(shù)的指針的指針。(2)、int*Ptr5表示指向5個(gè)指向整數(shù)的指針的指針,或者說(shuō)Ptr有5個(gè)指向一群整數(shù)的指針,Ptr是這5個(gè)指針構(gòu)成的數(shù)組的地址(3)、int(*Ptr)5表示指向一群指向5個(gè)整數(shù)數(shù)組的指針的指針。三、所占空間:(1)、int*Ptr和(3)、int(*Ptr)5一樣,在32位平臺(tái)里,都是4字節(jié),即一個(gè)指針。但(2)、int*Ptr5不同,它是5個(gè)指針,它占5*4=20個(gè)字節(jié)的內(nèi)
3、存空間。四、用法:、int*Ptr因?yàn)槭侵羔樀闹羔槪枰獌纱蝺?nèi)存分配才能使用其最終內(nèi)容。首先,Ptr=(int*)newint*5;這樣分配好了以后,它和(2)的意義相同了;然后要分別對(duì)5個(gè)指針進(jìn)行內(nèi)存分配,例如:Ptr0=newint20;它表示為第0個(gè)指針?lè)峙?0個(gè)整數(shù),分配好以后,Ptr0為指向20個(gè)整數(shù)的數(shù)組。這時(shí)可以使用下標(biāo)用法Ptr00到Ptr019了。如果沒(méi)有第一次內(nèi)存分配,該P(yáng)tr是個(gè)野指針,是不能使用的,如果沒(méi)有第二次內(nèi)存分配,則Ptr0等也是個(gè)野指針,也是不能用的。當(dāng)然,用它指向某個(gè)已經(jīng)定義的地址則是允許的,那是另外的用法(類似于借雞生蛋的做法),這里不作討論(下同)。例子
4、:C語(yǔ)言:/動(dòng)態(tài)分配二維數(shù)組空間mHight=10;二維數(shù)組的高度m;/二維數(shù)組的寬度動(dòng)態(tài)分配一個(gè)二維數(shù)組m_ppTable內(nèi)存空間/其類型為int/m_ppTable指向該數(shù)組int*m_ppTable;m_ppTable=newint*m_iHight;動(dòng)態(tài)分配mHight個(gè)類型為int*的內(nèi)存空間/分配的是行地址空間for(inti=0;im_ppTablei=newintm_iWidth;動(dòng)態(tài)分配mWidth個(gè)類型為int的內(nèi)存空間/分配的是某行的數(shù)值空間/由此分配的二維數(shù)組空間并非是連續(xù)的可以使用m_ppTablerowcol來(lái)給該二維數(shù)組賦值/其中0=row/釋放所分配的內(nèi)存空間f
5、or(inti=0;ideletem_iWidthm_ppTablei;/以行為單位釋放數(shù)值空間deletem_iHightm_ppTable;/釋放行地址空間int*a;a=(int*)calloc(sizeof(int*),n);for(i=0;iai=(int*)calloc(sizeof(int),n);這樣就可以了使用的時(shí)候就和普通的二維數(shù)組一樣最后用for(i=0;icfree(ai);cfree(a);釋放內(nèi)存就可以了、int*Ptr5這樣定義的話,編譯器已經(jīng)為它分配了5個(gè)指針的空間,這相當(dāng)于(1)中的第一次內(nèi)存分配。根據(jù)對(duì)(1)的討論可知,顯然要對(duì)其進(jìn)行一次內(nèi)存分配的。否則就是
6、野指針。、int(*Ptr)5這種定義我覺(jué)得很費(fèi)解,不是不懂,而是覺(jué)得理解起來(lái)特別吃力,也許是我不太習(xí)慣這樣的定義吧。怎么描述它呢?它的意義是一群指針,每個(gè)指針都是指向一個(gè)5個(gè)整數(shù)的數(shù)組。如果想分配k個(gè)指針這樣寫:Ptr=(int(*)5)newint5*k。這是一次性的內(nèi)存分配。分配好以后,Ptr指向一片連續(xù)的地址空間,其中Ptr0指向第0個(gè)5個(gè)整數(shù)數(shù)組的首地址,Ptr1指向第1個(gè)5個(gè)整數(shù)數(shù)組的首地址。綜上所述,我覺(jué)得可以這樣理解它們:int*PtrintPtrxy;int*Ptr5intPtr5x;int(*Ptr)5intPtrx5;這里x和y是表示若干的意思。1.C語(yǔ)言動(dòng)態(tài)分配二維數(shù)組
7、(1)已知第二維Code-1char(*a)N;指向數(shù)組的指針a=(char(*)N)malloc(sizeof(char*)*m);printf(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/N,維數(shù)組free(a);已知第一維Code-2char*aM;/指針的數(shù)組inti;for(i=0;iM;i+)ai=(char*)malloc(sizeof(char)*n);printf(%dn,sizeof(a);/4*M,指針數(shù)組printf(%dn,sizeof(a0);/4,指針for(i=0;iM;i+)free(ai);已知第一維,一次分配內(nèi)存(保
8、證內(nèi)存的連續(xù)性)Code-3char*aM;/指針的數(shù)組inti;a0=(char*)malloc(sizeof(char)*M*n);for(i=1;iM;i+)ai=ai-1+n;printf(%dn,sizeof(a);/4*M,指針數(shù)組printf(%dn,sizeof(a0);/4,指針free(a0);兩維都未知Code-4char*a;inti;a=(char*)malloc(sizeof(char*)*m);分配指針數(shù)組for(i=0;im;i+)ai=(char*)malloc(sizeof(char)*n);分配每個(gè)指針?biāo)赶虻臄?shù)組printf(%dn,sizeof(a);
9、/4,指針printf(%dn,sizeof(a0);/4,指針for(i=0;im;i+)free(ai);free(a);(5)兩維都未知,一次分配內(nèi)存(保證內(nèi)存的連續(xù)性)Code-5char*a;inti;a=(char*)malloc(sizeof(char*)*m);/分配指針數(shù)組a0=(char*)malloc(sizeof(char)*m*n);/一次性分配所有空間for(i=1;im;i+)ai=ai-1+n;printf(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/4,指針free(a0);free(a);2.C+動(dòng)態(tài)分配二維數(shù)組已知第
10、二維Code-6char(*a)N;/指向數(shù)組的指針a=newcharmN;printf(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/N,維數(shù)組deletea;已知第一維Code-7char*aM;/指針的數(shù)組for(inti=0;iM;i+)ai=newcharn;printf(%dn,sizeof(a);/4*M,指針數(shù)組printf(%dn,sizeof(a0);/4,指針for(i=0;iM;i+)deleteai;(3)已知第一維,一次分配內(nèi)存(保證內(nèi)存的連續(xù)性)Code-8char*aM;指針的數(shù)組a0=newcharM*n;for(inti
11、=1;iM;i+)ai=ai-1+n;printf(%dn,sizeof(a);/4*M,指針數(shù)組printf(%dn,sizeof(a0);/4,指針deletea0;兩維都未知Code-9char*a;a=newchar*m;/分配指針數(shù)組for(inti=0;im;i+)ai=newcharn;分配每個(gè)指針?biāo)赶虻臄?shù)組printf(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/4,指針for(i=0;im;i+)deleteai;deletea;兩維都未知,一次分配內(nèi)存(保證內(nèi)存的連續(xù)性)Code-10char*a;a=newchar*m;a0=ne
12、wcharm*n;/一次性分配所有空間for(inti=1;im;i+)ai=ai-1+n;/分配每個(gè)指針?biāo)赶虻臄?shù)組printf(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/4,指針deletea0;deletea;多說(shuō)一句:new和delete要注意配對(duì)使用,即有多少個(gè)new就有多少個(gè)delete,這樣才可以避免內(nèi)存泄漏!3.靜態(tài)二維數(shù)組作為函數(shù)參數(shù)傳遞如果采用上述幾種方法動(dòng)態(tài)分配二維數(shù)組,那么將對(duì)應(yīng)的數(shù)據(jù)類型作為函數(shù)參數(shù)就可以了。這里討論靜態(tài)二維數(shù)組作為函數(shù)參數(shù)傳遞,即按照以下的調(diào)用方式:inta23;func(a);C語(yǔ)言中將靜態(tài)二維數(shù)組作為參數(shù)
13、傳遞比較麻煩,一般需要指明第二維的長(zhǎng)度,如果不給定第二維長(zhǎng)度,則只能先將其作為一維指針傳遞,然后利用二維數(shù)組的線性存儲(chǔ)特性,在函數(shù)體內(nèi)轉(zhuǎn)化為對(duì)指定元素的訪問(wèn)。首先寫好測(cè)試代碼,以驗(yàn)證參數(shù)傳遞的正確性:給定第二維長(zhǎng)度Code-11voidfunc(intaN)printf(%dn,a12);不給定第二維長(zhǎng)度Code-12voidfunc(int*a)printf(%dn,a1*N+2);/計(jì)算元素位置注意:使用該函數(shù)時(shí)需要將二維數(shù)組首地址強(qiáng)制轉(zhuǎn)換為一維指針,即func(int*)a);1.C語(yǔ)言動(dòng)態(tài)分配二維數(shù)組(1)已知第二維Code-1char(*a)N;指向數(shù)組的指針a=(char(*)N)
14、malloc(sizeof(char*)*m);printf(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/N,一維數(shù)組free(a);已知第一維Code-2char*aM;/指針的數(shù)組inti;for(i=0;iM;i+)ai=(char*)malloc(sizeof(char)*n);printf(%dn,sizeof(a);/4*M,指針數(shù)組printf(%dn,sizeof(a0);/4,指針for(i=0;iM;i+)free(ai);已知第一維,一次分配內(nèi)存(保證內(nèi)存的連續(xù)性)Code-3char*aM;/指針的數(shù)組inti;a0=(char*
15、)malloc(sizeof(char)*M*n);for(i=1;iM;i+)ai=ai-1+n;printf(%dn,sizeof(a);/4*M,指針數(shù)組printf(%dn,sizeof(a0);/4,指針free(a0);兩維都未知Code-4char*a;inti;a=(char*)malloc(sizeof(char*)*m);/分配指針數(shù)組for(i=0;im;i+)ai=(char*)malloc(sizeof(char)*n);/分配每個(gè)指針?biāo)赶虻臄?shù)組printf(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/4,指針for(i=0;
16、im;i+)free(ai);free(a);兩維都未知,一次分配內(nèi)存(保證內(nèi)存的連續(xù)性)Code-5char*a;inti;a=(char*)malloc(sizeof(char*)*m);/分配指針數(shù)組a0=(char*)malloc(sizeof(char)*m*n);/一次性分配所有空間for(i=1;im;i+)ai=ai-1+n;printf(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/4,指針free(a0);free(a);2.C+動(dòng)態(tài)分配二維數(shù)組已知第二維Code-6char(*a)N;/指向數(shù)組的指針a=newcharmN;print
17、f(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/N,維數(shù)組deletea;已知第一維Code-7char*aM;/指針的數(shù)組for(inti=0;iM;i+)ai=newcharn;printf(%dn,sizeof(a);/4*M,指針數(shù)組printf(%dn,sizeof(a0);/4,指針for(i=0;iM;i+)deleteai;(3)已知第一維,一次分配內(nèi)存(保證內(nèi)存的連續(xù)性)Code-8char*aM;/指針的數(shù)組a0=newcharM*n;for(inti=1;iM;i+)ai=ai-1+n;printf(%dn,sizeof(a);/4
18、*M,指針數(shù)組printf(%dn,sizeof(a0);/4,指針deletea0;兩維都未知Code-9char*a;a=newchar*m;/分配指針數(shù)組for(inti=0;im;i+)ai=newcharn;分配每個(gè)指針?biāo)赶虻臄?shù)組printf(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/4,指針for(i=0;im;i+)deleteai;deletea;兩維都未知,一次分配內(nèi)存(保證內(nèi)存的連續(xù)性)Code-10char*a;a=newchar*m;a0=newcharm*n;/一次性分配所有空間for(inti=1;im;i+)ai=ai-1+n;/分配每個(gè)指針?biāo)赶虻臄?shù)組printf(%dn,sizeof(a);/4,指針printf(%dn,sizeof(a0);/4,指針deletea0;deletea;多說(shuō)一句:new和delete要注意配對(duì)使用,即有多少個(gè)new就有多少個(gè)delete,這樣才可以避免內(nèi)存泄漏!3.靜態(tài)二維數(shù)組作為函數(shù)參數(shù)傳遞如果采用上述幾種方法動(dòng)態(tài)分配二維數(shù)組,那么將對(duì)應(yīng)的數(shù)據(jù)類型作為函數(shù)參數(shù)就可以了。這里討論靜態(tài)二維數(shù)組作為函數(shù)參
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度文化旅游工程居間服務(wù)合同范本標(biāo)準(zhǔn)
- 2025年度數(shù)據(jù)中心基礎(chǔ)設(shè)施建設(shè)監(jiān)理合同
- 曲靖2025年云南曲靖市師宗縣事業(yè)單位委托遴選26人(含遴選)筆試歷年參考題庫(kù)附帶答案詳解
- 2025年金屬包裝罐項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)豪華三聯(lián)控制臺(tái)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年磨內(nèi)弧砂輪項(xiàng)目可行性研究報(bào)告
- 2025年玩具鹿項(xiàng)目可行性研究報(bào)告
- 2025年氰戊菊酯項(xiàng)目可行性研究報(bào)告
- 惠州2025年廣東惠州市中醫(yī)醫(yī)院第二批招聘聘用人員22人筆試歷年參考題庫(kù)附帶答案詳解
- 2025年微波爐溫度傳感器項(xiàng)目可行性研究報(bào)告
- 2025年業(yè)務(wù)員工作總結(jié)及工作計(jì)劃模版(3篇)
- 必修3《政治與法治》 選擇題專練50題 含解析-備戰(zhàn)2025年高考政治考試易錯(cuò)題(新高考專用)
- 二零二五版電商企業(yè)兼職財(cái)務(wù)顧問(wèn)雇用協(xié)議3篇
- 課題申報(bào)參考:流視角下社區(qū)生活圈的適老化評(píng)價(jià)與空間優(yōu)化研究-以沈陽(yáng)市為例
- 深圳2024-2025學(xué)年度四年級(jí)第一學(xué)期期末數(shù)學(xué)試題
- 2024-2025學(xué)年成都市高新區(qū)七年級(jí)上英語(yǔ)期末考試題(含答案)
- 17J008擋土墻(重力式、衡重式、懸臂式)圖示圖集
- 《中南大學(xué)模板》課件
- 廣東省深圳市南山區(qū)2024-2025學(xué)年第一學(xué)期期末考試九年級(jí)英語(yǔ)試卷(含答案)
- T-CISA 402-2024 涂鍍產(chǎn)品 切口腐蝕試驗(yàn)方法
- 道教系統(tǒng)諸神仙位寶誥全譜
評(píng)論
0/150
提交評(píng)論