內(nèi)存單元的地址-指針程序設(shè)計(jì).ppt_第1頁
內(nèi)存單元的地址-指針程序設(shè)計(jì).ppt_第2頁
內(nèi)存單元的地址-指針程序設(shè)計(jì).ppt_第3頁
內(nèi)存單元的地址-指針程序設(shè)計(jì).ppt_第4頁
內(nèi)存單元的地址-指針程序設(shè)計(jì).ppt_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

高級(jí)語言程序設(shè)計(jì),第7章 內(nèi)存單元的地址 指針程序設(shè)計(jì)(2),二維數(shù)組批量數(shù)據(jù)處理的指針版,問題描述: 假設(shè)有全班60個(gè)人3門課程數(shù)學(xué)、英語、計(jì)算機(jī)的成績(jī)數(shù)據(jù),包括學(xué)號(hào),試按每個(gè)人的總分對(duì)其降序排序。,分析,設(shè)已經(jīng)定義了數(shù)組 int num M, grade M N, totalM=0; 要通過input函數(shù)獲得用戶鍵盤輸入的數(shù)據(jù) 然后用chooseSort函數(shù)排序, 再用print函數(shù)打印輸出排序的結(jié)果,期望使用三個(gè)函數(shù), 其原型為,void input (int num, int grade 3,int total ); void chooseSort (int num , int grade 3, int total ); void print (const int num , const int grade 3, const int total );,或者,void input (int *num, ?int *grade, int *total); void chooseSort (int *num, ?int *grade, int *total); void print (const int *num, ?const int *grade; const int *total); 其中指向二維數(shù)組grade的指針如何定義和表示還不明確,然后,通過指針訪問一維數(shù)組或二維數(shù)組的元素 實(shí)現(xiàn)讀寫數(shù)據(jù),指針與二維數(shù)組的關(guān)系 二維數(shù)組名與行列地址,注意關(guān)于二維數(shù)組下面的事實(shí),用指針訪問二維數(shù)組元素的第一種方法,由前面分析的結(jié)果可以看出,直接把二維數(shù)組名作為行地址的行地址進(jìn)行行列偏移既可以訪問二維數(shù)組的元素 即 *(*(a+i)+j),如果定義成指針參數(shù)該是什么樣的指針呢?,void input(int *pNum, int *pGrade, int *pTotal); int *pGrade說明的pGrade能指向二維數(shù)組grade嗎? 回答是不能! 指針的類型必須與它所指向的變量類型相同 pGrade是什么類型? 二維數(shù)組名grade是什么含義?,用指針訪問二維數(shù)組元素的第二種方法行指針,指向行地址的指針-行指針, int (*pGrade)3 = grade; pGrade是行指針,是有3列的行指針 這樣 pGrade+1 就是grade +1 pGrade+2 就是grade + 2 ,函數(shù)調(diào)用可以寫成 : input ( num, grade, total);,注意這里的*grade在前面是*pGrade,用指針訪問二維數(shù)組元素的第三種方法-把二維數(shù)組看成一維數(shù)組,對(duì)于二維數(shù)組gradeMN, 定義 int *p = *grade; 則 p就是第一列的地址(第一個(gè)元素的地址)(第一行的首地址,見前面的圖,也就是第一列的地址),p指向了二維數(shù)組的第一個(gè)元素 第i行第j列的元素為 *(p+i*N+j) 或者寫成下標(biāo)的形式, 注意是單下標(biāo) pi*N+j,函數(shù)調(diào)用為:input(num, *grade, total);,指針的指針,二維數(shù)組名和行指針是一類特殊的指針,它指向的元素是行地址。 還有多級(jí)指針,最典型的就是二級(jí)指針 int a = 10; int *aPtr= 其中*aPPtr就定義了一個(gè)二重指針,思考:可以用二重指針指向一個(gè)二維數(shù)組嗎?,例如 int *p, a23=1,2,3,4,5,6; p=a;,應(yīng)該用行指針?;蛘呷缦露x的若干個(gè)指針構(gòu)成的指針數(shù)組,思考:注意指針數(shù)組和行指針的不同,指向函數(shù)的指針,函數(shù)與數(shù)據(jù)一樣,也要存儲(chǔ)在內(nèi)存中,因此也有首地址。這個(gè)首地址就是函數(shù)的第一條語句(或指令)在內(nèi)存中的地址,通常稱這個(gè)地址為函數(shù)的入口地址。 怎么定義指向函數(shù)的指針變量呢?它的格式與普通的指針變量略有不同,形式如下: 數(shù)據(jù)類型 (*指針變量名) (形參參數(shù)列表),例如,int max(int a, int b); int min(int a, int b); 假設(shè)它們對(duì)應(yīng)的代碼已經(jīng)放在內(nèi)存的某個(gè)位置,定義一個(gè)可以指向這類函數(shù)的指針變量 定義 int (* ifuncPtr) ( int,int); 則 ifuncPtr = max; ifuncPtr就指向了max。 同樣可以讓ifuncPtr指向min。,間接引用函數(shù),int a,b; scanf(“%d %d”,指向函數(shù)的指針作為函數(shù)的參數(shù),排序算法中,升序和降序的區(qū)別僅僅在于排序過程中關(guān)系表達(dá)式是大于還是小于,除此之外都是一樣的。 可以用一個(gè)指向大于比較或小于比較的函數(shù)指針使排序算法函數(shù)成為升序降序通用的函數(shù) 升降的區(qū)別就在于比較的時(shí)候用大于還是小于,可以定義兩個(gè)函數(shù),int ascending(const int a, const int b); int descending(const int a, const int b); 即 int ascending(const int a, const int b) return ba; ,再定義一個(gè)交換函數(shù),void swap(int *x, int *y); 即 void swap(int *x, int *y) int temp; temp = *x; *x = *y; *y = temp; ,選擇法升序降序通用函數(shù),void chooseSort(int num,int grade3,int total, int(*compare)(int,int) ) in

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論