




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第9章 指針編輯課件本章學(xué)習(xí)內(nèi)容 指針數(shù)據(jù)類型 指針變量的定義和初始化 取地址運(yùn)算符,間接尋址運(yùn)算符 按值調(diào)用與按地址調(diào)用,指針變量作函數(shù) 參數(shù) 函數(shù)指針 void Swap(int x,int y) int temp; temp = x; x = y; y = temp;int main() int a, b; a = 5; b = 9; Swap(a, b); printf(a=%d,b=%d,a,b); return 0;程序 1:簡單變量作函數(shù)參數(shù)例7.9未能解決的問題:兩數(shù)互換void Swap(int *x,int *y) int temp; temp = *x; *x = *y;
2、 *y = temp;int main() int a, b; a = 5; b = 9; Swap( &a, &b ); printf(a=%d,b=%d,a,b); return 0;程序 2:指針變量作函數(shù)參數(shù) Not Work!Why?指針為函數(shù)提供修改變量值的手段 9.1變量的內(nèi)存地址變量的地址(Address)變量名內(nèi)存:計(jì)算機(jī)內(nèi)的存儲(chǔ)部件所有指令和數(shù)據(jù)都保存在內(nèi)存里速度快,可隨機(jī)訪問,但掉電即失編譯或函數(shù)調(diào)用時(shí)為變量分配內(nèi)存單元int a=0;0 x0037b0000000ContentsContentsContentsContentsContentsContentsConten
3、ts變量的值a某存儲(chǔ)區(qū)域 9.1變量的內(nèi)存地址變量的地址內(nèi)存中的每個(gè)字節(jié)都有唯一的編號(hào)(地址)地址是一個(gè)十六進(jìn)制無符號(hào)整數(shù)其字長一般與主機(jī)相同地址按字節(jié)編號(hào),按類型分配空間0 x0037b0000000ContentsContentsContentsContentsContentsContentsContents某存儲(chǔ)區(qū)域0 x0037b0010 x0037b0020 x0037b003&aAddress Operatorint a=0;a 9.1變量的內(nèi)存地址如何讀寫內(nèi)存中的數(shù)據(jù)?0 x0037b0000000ContentsContentsContentsContentsContentsC
4、ontentsContents某存儲(chǔ)區(qū)域0 x0037b0010 x0037b0020 x0037b003只要指明要訪問的變量的內(nèi)存單元地址就可以立即訪問到變量所在的存儲(chǔ)單元&ascanf(%d, &a);int a=0;a 9.1變量的內(nèi)存地址【例9.1】使用取地址運(yùn)算符&取出變量的地址,然后將其顯示在屏幕上。表示輸出變量a的地址值? 9.1變量的內(nèi)存地址如何讀寫內(nèi)存中的數(shù)據(jù)?0 x0037b0000000ContentsContentsContentsContentsContentsContentsContents某存儲(chǔ)區(qū)域0 x0037b0010 x0037b0020 x0037b003
5、直接尋址:按變量地址存取變量值&ascanf(%d, &a);aint a=0; 9.1變量的內(nèi)存地址如何讀寫內(nèi)存中的數(shù)據(jù)?0 x0037b0000000ContentsContentsContentsContentsContentsContents0 x0037b000某存儲(chǔ)區(qū)域0 x0037b0010 x0037b0020 x0037b003間接尋址:通過存放變量地址的變量去訪問變量&aaint a=0;int i;scanf(%d, i); /* 這樣會(huì)如何?*/char c;scanf(%d, &c); /* 這樣呢?*/i的值被當(dāng)作地址。如i=100,則輸入的整數(shù)就會(huì)從地址100開始
6、寫入內(nèi)存輸入以int的二進(jìn)制形式寫到c所在的內(nèi)存空間。c所占內(nèi)存不足以放下一個(gè)int,其后的空間也被覆蓋9.2指針變量的定義和初始化存放變量的地址需要一種特殊類型的變量指針(Pointer)類型指針變量具有指針類型的變量變量的指針變量的地址 指針變量 指向 變量變量的地址(指針)變量值變量地址存入指針變量 9.2指針變量的定義和初始化【例9.2】使用指針變量在屏幕上顯示變量的地址值定義了指針變量pa,但pa并未指向a?如果指針指向一個(gè)非你控制的內(nèi)存空間并對(duì)該空間進(jìn)行訪問,將可能造成危險(xiǎn) 9.2指針變量的定義和初始化【例9.2】使用指針變量在屏幕上顯示變量的地址值指針變量使用之前必須初始化Nev
7、er use uninitialized pointers 9.2指針變量的定義和初始化【例9.2】使用指針變量在屏幕上顯示變量的地址值 9.2指針變量的定義和初始化【例9.2】使用指針變量在屏幕上顯示變量的地址值Pointers have names, types and values 9.2指針變量的定義和初始化【例9.2】使用指針變量在屏幕上顯示變量的地址值指針變量指向的數(shù)據(jù)類型稱為基類型指針變量只能指向同一基類型的變量 9.2指針變量的定義和初始化【例9.2】使用指針變量在屏幕上顯示變量的地址值不能寫成:int *pa, pb; 9.3 間接尋址運(yùn)算符【例9.3】使用指針變量,通過間接
8、尋址輸出變量的值pa 0*pa &aa 9.3 間接尋址運(yùn)算符【例9.3】使用指針變量,通過間接尋址輸出變量的值pa 0*pa &aa9引用指針?biāo)赶虻淖兞康闹捣Q為指針的解引用(Pointer Dereference)普通變量作函數(shù)參數(shù)按值調(diào)用(Call by Value)Can not modify the argument 形參(parameter) 實(shí)參變量(variable)指針作函數(shù)參數(shù)按地址調(diào)用(Call by Reference )In order to modify the argument,use: 指針形參(pointer parameter) &(variable)a&a
9、pointer parameteraxparameterargument9.4 按值調(diào)用與按地址調(diào)用 9.4 按值調(diào)用與按地址調(diào)用【例9.4】演示按值調(diào)用傳變量的值形參值的改變不會(huì)影響對(duì)應(yīng)的實(shí)參 9.4 按值調(diào)用與按地址調(diào)用【例9.5】演示按地址調(diào)用傳變量地址 9.4 按值調(diào)用與按地址調(diào)用【例9.4】演示按值調(diào)用指針變量作函數(shù)參數(shù)可以修改實(shí)參的值【例9.5】演示按地址調(diào)用 9.4 按值調(diào)用與按地址調(diào)用【例9.4】演示按值調(diào)用return僅限于從函數(shù)返回一個(gè)值void Swap(int *x,int *y) int temp; temp = *x; *x = *y; *y = temp;int
10、main() int a, b; a = 5; b = 9; Swap( &a, &b ); printf(a=%d,b=%d,a,b); return 0; void Swap(int x,int y) int temp; temp = x; x = y; y = temp;int main() int a, b; a = 5; b = 9; Swap(a, b); printf(a=%d,b=%d,a,b); return 0;程序 1程序 2 主調(diào)函數(shù)被調(diào)函數(shù)實(shí) 參形 參結(jié)果有何不同?Not Work!Why?Trace the execution例9.6:編寫函數(shù)實(shí)現(xiàn)兩數(shù)的互換int
11、main() int a, b; a = 5; b = 9; Swap(a, b); printf(a=%d,b=%d,a,b); return 0;void Swap(int x, int y) int temp; temp = x; x = y; y = temp;55ab實(shí) 參形 參99xyabxy55temp9x 和 y是內(nèi)部變量單向值傳遞例9.6:編寫函數(shù)實(shí)現(xiàn)兩數(shù)的互換主調(diào)函數(shù)被調(diào)函數(shù)int main() int a, b; a = 5; b = 9; Swap( &a, &b ); printf(a=%d,b=%d,a,b); return 0;void Swap(int *x,
12、int *y) int temp; temp = *x; *x = *y; *y = temp;&a&a實(shí) 參形 參&b&bxyabxy5temp5ab995*x*y交換的是x 和 y指向的單元內(nèi)容主調(diào)函數(shù)被調(diào)函數(shù)例9.6:編寫函數(shù)實(shí)現(xiàn)兩數(shù)的互換void Swap(int *x, int *y) int temp; temp = *x; *x = *y; *y = temp;指針pTemp未初始化指針pTemp指向哪里未知對(duì)未知單元寫操作是危險(xiǎn)的void Swap(int *x, int *y) int *pTemp; *pTemp = *x; *x = *y; *y = *pTemp; 永遠(yuǎn)
13、要清楚:每個(gè)指針指向了哪里指針指向的內(nèi)容是什么 void Swap(int *x, int *y) int temp; temp = *x; *x = *y; *y = temp;指針pTemp被賦了值但交換的是地址值不是指針指向單元的內(nèi)容void Swap(int *x, int *y) int *pTemp; pTemp = x; x = y; y = pTemp; 9.5用指針變量作函數(shù)參數(shù)的程序?qū)嵗?【例9.7】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號(hào)【例9.7】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號(hào)Not Work!Why?9.5用指針變量作函數(shù)參數(shù)的程序?qū)嵗?9.5用指針變量作函數(shù)參數(shù)的程序?qū)嵗?/p>
14、 【例9.7】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號(hào)真正的原因:普通變量作函數(shù)參數(shù)按值調(diào)用不能在被調(diào)函數(shù)中改變相應(yīng)的實(shí)參值9.5用指針變量作函數(shù)參數(shù)的程序?qū)嵗?【例9.7】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號(hào)9.5用指針變量作函數(shù)參數(shù)的程序?qū)嵗?【例9.7】計(jì)算并輸出最高分及相應(yīng)學(xué)生的學(xué)號(hào)9.6函數(shù)指針及其應(yīng)用 函數(shù)指針(Function Pointers)就是指向函數(shù)的指針(Pointer to a Function)指向函數(shù)的指針變量存儲(chǔ)的是函數(shù)在內(nèi)存中的入口地址 編譯器將不帶()的函數(shù)名解釋為該函數(shù)的入口地址數(shù)據(jù)類型 (* 指針名)();例如:int (*p)(); 常見錯(cuò)誤:忘記了前一個(gè)(),寫
15、成int *p(); /*聲明一個(gè)函數(shù)名為p、返回值是整型指針的函數(shù)*/忘掉了后一個(gè)(),寫成int (*p); /*定義了一個(gè)整型指針*/定義時(shí)后一個(gè)括號(hào)內(nèi)的參數(shù)類型與指向的函數(shù)參數(shù)類型不匹配應(yīng)用編寫通用性更強(qiáng)的函數(shù)典型實(shí)例1計(jì)算函數(shù)的定積分典型實(shí)例2既能按照升序排序,又能按照降序排序9.6函數(shù)指針及其應(yīng)用 【例9.8】修改例8.8中的排序函數(shù),使其既能實(shí)現(xiàn)對(duì)學(xué)生成績的升序排序,又能實(shí)現(xiàn)對(duì)學(xué)生成績的降序排序先不使用函數(shù)指針編程 9.6函數(shù)指針及其應(yīng)用 9.6函數(shù)指針及其應(yīng)用 9.6函數(shù)指針及其應(yīng)用 【例9.9】修改例9.8中的程序?qū)嵗煤瘮?shù)指針編程實(shí)現(xiàn)一個(gè)通用的排序函數(shù),對(duì)學(xué)生成績既能實(shí)現(xiàn)升序排序,又能實(shí)現(xiàn)降序排序 使用函數(shù)指針編程 9.6函數(shù)指針及其應(yīng)用 9.6函數(shù)指針及其應(yīng)用 Swap(&ai, &ak); 9.6函數(shù)指針及其應(yīng)用 void SelectionSort(int a, int n, int (*compare)(int a, int b) if (*compare)(aj, ak) /*決定數(shù)據(jù)是否按升序排序,ab為真,則按升序排序*/int Ascending(int a, int b
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水上運(yùn)動(dòng)設(shè)施建設(shè)投資合同
- 建設(shè)工程施工承包墊資合同
- 信息咨詢服務(wù)合同書
- 電子商務(wù)法電子合同法
- 四川外國語大學(xué)《化工設(shè)備設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東東軟學(xué)院《射頻集成電路分析與設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 邢臺(tái)學(xué)院《鋼琴5》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆建設(shè)職業(yè)技術(shù)學(xué)院《水利水電工程概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 青海師范大學(xué)《數(shù)字高程模型》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西航空職業(yè)技術(shù)學(xué)院《美術(shù)三》2023-2024學(xué)年第二學(xué)期期末試卷
- 咖啡店合同咖啡店合作經(jīng)營協(xié)議
- 2025年山東鋁業(yè)職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫含答案解析
- 全套電子課件:技能成就夢(mèng)想
- 2024年教育公共基礎(chǔ)知識(shí)筆記
- 2025年江蘇農(nóng)林職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫含答案解析
- 異構(gòu)數(shù)據(jù)融合技術(shù)-深度研究
- 北京市朝陽區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 《銷售合同執(zhí)行》課件
- 2024年湖南汽車工程職業(yè)學(xué)院單招職業(yè)技能測(cè)試題庫標(biāo)準(zhǔn)卷
- (正式版)HGT 6313-2024 化工園區(qū)智慧化評(píng)價(jià)導(dǎo)則
- 二級(jí)公立醫(yī)院績效考核三級(jí)手術(shù)目錄(2020版)
評(píng)論
0/150
提交評(píng)論