(參考)C程序設(shè)計(jì)(第四版)教案第八章_第1頁(yè)
(參考)C程序設(shè)計(jì)(第四版)教案第八章_第2頁(yè)
(參考)C程序設(shè)計(jì)(第四版)教案第八章_第3頁(yè)
(參考)C程序設(shè)計(jì)(第四版)教案第八章_第4頁(yè)
(參考)C程序設(shè)計(jì)(第四版)教案第八章_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 教 案 首 頁(yè)授課日期年級(jí)、專業(yè)課 題: 第8章 善于利用指針 課 型: 講授+上機(jī) 目的要求: 1、掌握指針變量 2、掌握返回函數(shù)的指針 重 點(diǎn): 1、指針數(shù)組和多重指針 2、返回指針的函數(shù) 難 點(diǎn): 1、用函數(shù)指針變量調(diào)用函數(shù) 2、指針數(shù)組做main函數(shù)的形參 教學(xué)方法: 多媒體教學(xué)+上機(jī) 課外作業(yè): 課后分析: 檢查者簽字: 年 月 日6 / 6第8章 善于利用指針8.1 指針是什么Ø如果在程序中定義了一個(gè)變量,在對(duì)程序進(jìn)行編譯時(shí),系統(tǒng)就會(huì)給該變量分配內(nèi)存單元Ø編譯系統(tǒng)根據(jù)程序中定義的變量類型,分配一定長(zhǎng)度的空間Ø內(nèi)存區(qū)的每一個(gè)字節(jié)有一個(gè)編號(hào),這就是“位置

2、”,它相當(dāng)于旅館中的房間號(hào)。Ø在位置所標(biāo)識(shí)的內(nèi)存單元中存放數(shù)據(jù),這相當(dāng)于旅館房間中居住的旅客一樣。Ø由于通過(guò)位置能找到所需的變量單元,我們可以說(shuō),位置指向該變量單元。Ø將位置形象化地稱為“指針”Ø務(wù)必弄清楚存儲(chǔ)單元的位置和存儲(chǔ)單元的內(nèi)容這兩個(gè)概念的區(qū)別Ø一個(gè)變量的位置稱為該變量的“指針”例如,位置2000是變量的指針Ø如果有一個(gè)變量專門用來(lái)存放另一變量的位置(即指針),則它稱為“指針變量”Øi_pointer就是一個(gè)指針變量。指針變量就是位置變量,用來(lái)存放位置的變量,指針變量的值是位置(即指針)Ø“指針”和“指針變

3、量”是不同的概念Ø可以說(shuō)變量i的指針是2000,而不能說(shuō)i的指針變量是2000Ø指針是一個(gè)位置,而指針變量是存放位置的變量8.2 指針變量8.2.1 怎樣定義指針變量Ø定義指針變量的一般形式為: 類型 * 指針變量名;如:int *pointer_1, *pointer_2;uint是為指針變量指定的“基類型”u基類型指定指針變量可指向的變量類型u如pointer_1可以指向整型變量,但不能指向浮點(diǎn)型變量Ø在引用指針變量時(shí),可能有三種情況:u給指針變量賦值。如:p=&a;u引用指針變量指向的變量。如有 p=&a; *p=1; 則執(zhí)行pri

4、ntf(“%d”,*p); 將輸出1u引用指針變量的值。如:printf(“%o”,p);8.2.2 怎樣引用指針變量u要熟練掌握兩個(gè)有關(guān)的運(yùn)算符:(1) 取位置運(yùn)算符。 &a是變量a的位置(2) * 指針運(yùn)算符(“間接訪問(wèn)”運(yùn)算符) 如果: p指向變量a,則*p就代表a。 k=*p; (把a(bǔ)的值賦給k) *p=1; (把1賦給a)8.2.3 指針變量作為函數(shù)參數(shù)Ø如果想通過(guò)函數(shù)調(diào)用得到個(gè)要改變的值: 在主調(diào)函數(shù)中設(shè)個(gè)變量,用個(gè)指針變量指向它們 設(shè)計(jì)一個(gè)函數(shù),有n個(gè)指針形參。在這個(gè)函數(shù)中改變這個(gè)形參的值 在主調(diào)函數(shù)中調(diào)用這個(gè)函數(shù),在調(diào)用時(shí)將這n個(gè)指針變量作實(shí)參,將它們的位置傳

5、給該函數(shù)的形參 在執(zhí)行該函數(shù)的過(guò)程中,通過(guò)形參指針變量,改變它們所指向的個(gè)變量的值主調(diào)函數(shù)中就可以使用這些改變了值的變量8.3通過(guò)指針引用數(shù)組8.3.1 數(shù)組元素的指針Ø一個(gè)變量有位置,一個(gè)數(shù)組包含若干元素,每個(gè)數(shù)組元素都有相應(yīng)的位置Ø指針變量可以指向數(shù)組元素(把某一元素的位置放到一個(gè)指針變量中)Ø所謂數(shù)組元素的指針就是數(shù)組元素的位置Ø可以用一個(gè)指針變量指向一個(gè)數(shù)組元素 Int a10=1,3,5,7,9,11,13,15,17,19; int *p; p=&a0;8.3.2 在引用數(shù)組元素時(shí)指針的運(yùn)算Ø在指針指向數(shù)組元素時(shí),允許以下運(yùn)

6、算:u加一個(gè)整數(shù)(用+或+=),如p+1u減一個(gè)整數(shù)(用-或-=),如p-1u自加運(yùn)算,如p+,+pu自減運(yùn)算,如p-,-pu兩個(gè)指針相減,如p1-p2 (只有p1和p2都指向同一數(shù)組中的元素時(shí)才有意義)(1) 如果指針變量p已指向數(shù)組中的一個(gè)元素,則p+1指向同一數(shù)組中的下一個(gè)元素,p-1指向同一數(shù)組中的上一個(gè)元素。 float a10,*p=a; 假設(shè)a0的位置為2000,則up的值為2000up+1的值為2004uP-1的值為1996(2) 如果的初值為&a0,則p+i和a+i就是數(shù)組元素ai的位置,或者說(shuō),它們指向a數(shù)組序號(hào)為i的元素(3) *(p+i)或*(a+i)是p+i或

7、a+i所指向的數(shù)組元素,即ai。(4) 如果指針p1和p2都指向同一數(shù)組 p2-p1的值是4 不能p1+p28.3.3 通過(guò)指針引用數(shù)組元素Ø引用一個(gè)數(shù)組元素,可用下面兩種方法: () 下標(biāo)法,如ai形式 () 指針?lè)?,?(a+i)或*(p+i) 其中a是數(shù)組名,p是指向數(shù)組元素的指針變量,其初值p=aØ3種方法的比較: 第(1)和第(2)種方法執(zhí)行效率相同u編譯系統(tǒng)是將ai轉(zhuǎn)換為*(a+i)處理的,即先計(jì)算元素位置。u因此用第(1)和第(2)種方法找數(shù)組元素費(fèi)時(shí)較多。 第(3)種方法比第(1)、第(2)種方法快u用指針變量直接指向元素,不必每次都重新計(jì)算位置,像p+這樣

8、的自加操作是比較快的u這種有規(guī)律地改變位置值(p+)能大大提高執(zhí)行效率 用下標(biāo)法比較直觀,能直接知道是第幾個(gè)元素。 用位置法或指針變量的方法不直觀,難以很快地判斷出當(dāng)前處理的是哪一個(gè)元素。8.3.4 用數(shù)組名作函數(shù)參數(shù)Ø用數(shù)組名作函數(shù)參數(shù)時(shí),因?yàn)閷?shí)參數(shù)組名代表該數(shù)組首元素的位置,形參應(yīng)該是一個(gè)指針變量ØC編譯都是將形參數(shù)組名作為指針變量來(lái)處理的8.3.5 通過(guò)指針引用多維數(shù)組Ø指針變量可以指向一維數(shù)組中的元素,也可以指向多維數(shù)組中的元素。但在概念上和使用方法上,多維數(shù)組的指針比一維數(shù)組的指針要復(fù)雜一些。8.4 通過(guò)指針引用字符串8.4.1 字符串的引用方式

9、6;字符串是存放在字符數(shù)組中的。引用一個(gè)字符串,可以用以下兩種方法。(1) 用字符數(shù)組存放一個(gè)字符串,可以通過(guò)數(shù)組名和格式聲明“%s”輸出該字符串,也可以通過(guò)數(shù)組名和下標(biāo)引用字符串中一個(gè)字符。(2) 用字符指針變量指向一個(gè)字符串常量,通過(guò)字符指針變量引用字符串常量。8.4.2 字符指針作函數(shù)參數(shù)Ø如果想把一個(gè)字符串從一個(gè)函數(shù)“傳遞”到另一個(gè)函數(shù),可以用位置傳遞的辦法,即用字符數(shù)組名作參數(shù),也可以用字符指針變量作參數(shù)。Ø在被調(diào)用的函數(shù)中可以改變字符串的內(nèi)容Ø在主調(diào)函數(shù)中可以引用改變后的字符串。8.4.3 使用字符指針變量和字符數(shù)組的比較Ø用字符數(shù)組和字符指

10、針變量都能實(shí)現(xiàn)字符串的存儲(chǔ)和運(yùn)算,但它們二者之間是有 區(qū)別的,不應(yīng)混為一談,主要有以下幾點(diǎn)。(1) 字符數(shù)組由若干個(gè)元素組成,每個(gè)元素中放一個(gè)字符,而字符指針變量中存放的是位置(字符串第1個(gè)字符的位置),決不是將字符串放到字符指針變量中。(2) 賦值方式??梢詫?duì)字符指針變量賦值,但不能對(duì)數(shù)組名賦值。char *a; a=”I love China!”; 對(duì)char str14;str0=I; 對(duì)char str14; str=”I love China!”; 錯(cuò)3)初始化的含義char *a=”I love China!”;與char *a; a=”I love China!”;等價(jià)(4) 存

11、儲(chǔ)單元的內(nèi)容 編譯時(shí)為字符數(shù)組分配若干存儲(chǔ)單元,以存放各元素的值,而對(duì)字符指針變量,只分配一個(gè)存儲(chǔ)單元(5) 指針變量的值是可以改變的,而數(shù)組名代表一個(gè)固定的值(數(shù)組首元素的位置),不能改變。(6) 字符數(shù)組中各元素的值是可以改變的,但字符指針變量指向的字符串常量中的內(nèi)容是不可以被取代的。char a=”House”,*b=” House”;a2=r; 對(duì)(7) 引用數(shù)組元數(shù) 對(duì)字符數(shù)組可以用下標(biāo)法和位置法引用數(shù)組元素(a5,*(a+5))。如果字符指針變量p=a,則也可以用指針變量帶下標(biāo)的形式和位置法引用(p5,*(p+5))。(8) 用指針變量指向一個(gè)格式字符串,可以用它代替printf函

12、數(shù)中的格式字符串。8.5 指向函數(shù)的指針8.5.1什么是函數(shù)指針如果在程序中定義了一個(gè)函數(shù),在編譯時(shí),編譯系統(tǒng)為函數(shù)代碼分配一段存儲(chǔ)空間,這段存儲(chǔ)空間的起始位置,稱為這個(gè)函數(shù)的指針。Ø可以定義一個(gè)指向函數(shù)的指針變量,用來(lái)存放某一函數(shù)的起始位置,這就意味著此指針變量指向該函數(shù)。例如: int (*p)(int,int); 定義p是指向函數(shù)的指針變量,它可以指向類型為整型且有兩個(gè)整型參數(shù)的函數(shù)。p的類型用int (*)(int,int)表示8.5.2用函數(shù)指針變量調(diào)用函數(shù)(1)通過(guò)函數(shù)名調(diào)用函數(shù)(2)通過(guò)指針變量訪問(wèn)它所指向的函數(shù)8.5.3怎樣定義和使用指向函數(shù)的指針變量Ø定義指向函數(shù)的指針變量的一般形式為 數(shù)據(jù)類型 (*指針變量名)(函數(shù)參數(shù)表列); 如 int (*p)(int,int);

溫馨提示

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

評(píng)論

0/150

提交評(píng)論